求一个圆覆盖方格的算法

zilaishuichina 2017-07-28 04:29:00


假设如上图所示, N * M 的一个网格, 每个格子的边长L(即整个网格大小为(N*L) * (M*L)),网格左上角坐标 X, Y

一个在网格内的圆(整个圆不会出网格范围),圆心坐标 x,y,半径r

求被圆 覆盖住(哪怕只覆盖到网格的边,只覆盖到1个像素,都算覆盖住)的所有网格


求大牛解答,有没有什么比较好的,高效的算法?
...全文
1960 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zilaishuichina 2019-02-19
  • 打赏
  • 举报
回复


圆的最小外切正方形为图中红色的正方形,这个正方形的4个顶点的坐标都是可以算的,就是 圆心坐标 ± 圆的半径

得到4个顶点,就可以算出每个顶点所在的小格子, 分别用顶点坐标 除以 小格子的边长,就可以得到所在小格子的下标(第几行第几列),即图中绿色框住的范围

算这个绿色范围内的每个小格子(就是一个矩形) 和 这个圆 是否相交
zilaishuichina 2019-02-19
  • 打赏
  • 举报
回复
哦 应该叫 圆的外切正方形

引用 10 楼 zilaishuichina 的回复:
[quote=引用 9 楼 mikefather 的回复:]
[quote=引用 8 楼 zilaishuichina 的回复:]
[quote=引用 7 楼 mikefather 的回复:]
这个答案是什么


最后是用了 圆和矩形相交的判断, 然后遍历了圆的外接正方形内的所有小格子[/quote]

怎么判断是不是外接。[/quote]

圆的外接正方形的四个顶点都是可以算出来的啊。。。[/quote]
zilaishuichina 2019-02-19
  • 打赏
  • 举报
回复
引用 9 楼 mikefather 的回复:
[quote=引用 8 楼 zilaishuichina 的回复:]
[quote=引用 7 楼 mikefather 的回复:]
这个答案是什么


最后是用了 圆和矩形相交的判断, 然后遍历了圆的外接正方形内的所有小格子[/quote]

怎么判断是不是外接。[/quote]

圆的外接正方形的四个顶点都是可以算出来的啊。。。
mikefather 2019-02-19
  • 打赏
  • 举报
回复
引用 8 楼 zilaishuichina 的回复:
[quote=引用 7 楼 mikefather 的回复:] 这个答案是什么
最后是用了 圆和矩形相交的判断, 然后遍历了圆的外接正方形内的所有小格子[/quote] 怎么判断是不是外接。
zilaishuichina 2019-02-18
  • 打赏
  • 举报
回复
引用 7 楼 mikefather 的回复:
这个答案是什么


最后是用了 圆和矩形相交的判断, 然后遍历了圆的外接正方形内的所有小格子
mikefather 2019-01-25
  • 打赏
  • 举报
回复
这个答案是什么
zilaishuichina 2017-07-28
  • 打赏
  • 举报
回复
引用 4 楼 zhao4zhong1 的回复:
谁说后端就不能使用GPU运算?
我是说没有屏幕缓冲区的概念
赵4老师 2017-07-28
  • 打赏
  • 举报
回复
谁说后端就不能使用GPU运算?
zilaishuichina 2017-07-28
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
那屏幕缓冲区模拟? 使用GPU ?
这是一个后端需求。。。
赵4老师 2017-07-28
  • 打赏
  • 举报
回复
那→拿
赵4老师 2017-07-28
  • 打赏
  • 举报
回复
那屏幕缓冲区模拟? 使用GPU ?

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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