matrix - 从现有网格创建 2D 圆
问题描述
我们有一个矩阵:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
我想保留这些字段中的数据,但以二维圆的形状:
0 1 1 1 0
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
0 1 1 1 0
但这也扩大了:
0 0 0 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 0 0
0 1 1 1 1 1 1 1 1 0
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1
0 1 1 1 1 1 1 1 1 0
0 0 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 0 0 0
解决这个问题的最好方法是什么?
解决方案
cy
并且cx
是中心点
r
是半径
tiles
是一个空网格
function MakeCircle(tiles, cx, cy, r):
for x in range(cx - r, cx + r):
for y in range(cy - r, cy + r):
if (distance(cx, cy, x, y) <= r):
tiles[x][y] = 1
return(tiles)
function distance(x1, y1, x2, y2):
return(sqrt((x1 - x2)**2) + (y1 - y2)**2))
无论矩阵的大小如何,这都会在方阵中动态创建一个圆。
推荐阅读
- php - 我想在 php 中更新后在接下来的 24 小时内禁用编辑按钮
- reactjs - 当父状态改变时组件卸载
- emacs - Emacs 警告:“没有可用的版本信息(emacs 需要)”
- elasticsearch - 基于先验查询拆分elasticsearch timelion可视化
- php - 如何使用@yield 将其传输到 laravel 中的变量
- javascript - 如何在 Javascript 中检索 get 请求的值
- java - 将生产代码修改为可测试/仅用于测试目的是最佳实践吗?
- python - 如何从文件中读取数组
- java - 有没有办法以编程方式创建 RollingFileAppender?
- php - 如何在迁移运行期间指定目录路径