创建一个圆,将其划分为圆形扇区并使用 R 测试点所在的位置

create a circle, divide it into circular sectors and test where a point is located with R

我需要你的帮助来创建一个代码,使我能够在圆形网格中投影点,分为段和级别。我请求你的帮助,因为我知道这个社区到处都是优秀的人。

我想做的是

  1. 在笛卡尔平面中创建一个圆;它的中心点坐标必须是x=300和y=300,它的半径r=300;

  2. 构造完圆后,我需要把它分成几部分。我需要构建一个类似于您在下面看到的网格,但有 16 个线段(有 16 个标签,例如 sector_1 到 sector_16)和 5 个级别或同心圆(有 5 个标签,例如 level_1 到 level_4 + level_0 为中心圆)。所以我需要构造5个同心圆并将第二个,第三个,第四个和第五个分成16个部分。我的目标是获得点可能落在的一系列区域;

  1. 构建此网格后,我需要在其中投射一些我拥有的点以及其中的 x 和 y 坐标(例如 point_1 -> x=286;y=342);

R 应该 return 告诉我该点位于哪个段和哪个级别。

请问,我如何开发允许我执行此操作的代码?

任何帮助都是非常受欢迎和有帮助的。

非常感谢您的关注。

你可以这样绘制网格:

t <- seq(0, 2 * pi, length = 1000)

plot(300, 300, xlim = c(0, 600), ylim = c(0, 600))

for(i in 0:4) {
  lines((300 - (i * 60)) * sin(t) + 300, (300 - (i * 60)) * cos(t) + 300)
}

for(i in 0:7) {
  lines(300 * sin(c(i * pi /8, i * pi / 8 + pi)) + 300,
        300 * cos(c(i * pi /8, i * pi / 8 + pi)) + 300)
}

要计算该点落在哪一段,您计算到圆心的距离,并找到超过 60 秒的整数

sqrt((x - 300)^2 + (y - 300)^2) %/% 60

要知道它属于哪一段,需要找到它的极角,可以通过:

atan2((y - 300), (x - 300))

你可以通过找到它超过的 pi/8 的数量来确定它代表哪个段:

atan2((y - 300), (x - 300)) %/% pi/8