R: Извлечь круг из матрицы - PullRequest
       4

R: Извлечь круг из матрицы

0 голосов
/ 18 февраля 2019

Учитывая квадратную матрицу со сторонами длины L, как можно извлечь в R все значения, попадающие в максимально возможный круг, способный заполнить матрицу?

enter image description here

Я нашел Заполненный круг в матрице (2D-массив) для C ++, но как проверить, попадает ли положение каждой ячейки матрицы в уравнение?Как узнать X и Y каждой ячейки при использовании заявки на пример?

1 Ответ

0 голосов
/ 18 февраля 2019

Для некоторой матрицы 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 ++ намного быстрее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...