r - R:从矩阵中提取一个圆
问题描述
给定一个边长为 L 的方阵,如何在 R 中提取落入能够填充矩阵的最大可能圆的所有值?
我在 C++的矩阵(二维数组)中找到了填充圆,但是如何测试矩阵的每个单元格的位置是否落入等式?以apply为例,如何知道每个单元格的X和Y?
解决方案
对于一些 8x8 矩阵m
:
m = matrix(1:64,8,8)
创建坐标的数据框:
g = expand.grid(1:nrow(m), 1:nrow(m))
计算到中心的距离:
g$d2 = sqrt ((g$Var1-4.5)^2 + (g$Var2-4.5)^2)
与圆半径比较:
g$inside = g$d2<=4
你现在有一个行、列、到中心的距离和 is-it-inside 的数据框:
> head(g)
Var1 Var2 d2 inside
1 1 1 4.949747 FALSE
2 2 1 4.301163 FALSE
3 3 1 3.807887 TRUE
4 4 1 3.535534 TRUE
5 5 1 3.535534 TRUE
然后,您可以通过两列矩阵从矩阵中提取:
m[as.matrix(g[g$inside,c("Var1","Var2")])]
[1] 3 4 5 6 10 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
[26] 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 50 51 52 53 54 55 59 60
[51] 61 62
从您的图像中应该是 64 减去 12(每个角三个)单元格,所以我的答案中 52 的长度看起来是正确的。
如果您正在寻找速度,请跳过平方根并与距离平方 16 进行比较。但是您可能会更快地找到 C++ 中的解决方案。
推荐阅读
- php - php 7.3 fpm 的网站在 24 小时后运行到 503 服务不可用
- python - 寻找价值最高的路线
- ffmpeg - 如何在 AWS lambda 中导入 fluent-ffmpeg?
- c++ - 如何用两个不同的分隔符分割字符串
- flutter - Flutter:如何将拇指图像添加到滑块?
- c# - 我可以在 Linux 中编译 .net Core 3 WPF 应用程序吗?
- c# - 将 ViewBag 的值放在summernote 编辑器中
- c# - 使用 Entity Framework Core 存储计算属性
- scala - 我是 Gatling Tool 的新手。我们如何在 gatling 工具中进行协调和参数化?
- r - 如何在堆叠条形图中反转 geom_errorbar 的位置?