[英]R: Extract a circle from a matrix
给定一个边长为L的正方形矩阵,如何在R中提取所有落入能够填充矩阵的最大可能圆的值?
我在 C ++的matrix(2D array)中找到了实心圆,但是如何测试矩阵的每个单元格的位置是否落入方程中? 在使用示例时如何知道每个单元格的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
您现在有了一个行,列,到中心的距离以及在里面的数据框:
> 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 ++中的解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.