如何将笛卡尔坐标转换为具有特定原点的极坐标?

问题描述 投票:0回答:1

数据

df <- structure(list(x = c(93.0257, 91.7141, 90.2897, 88.7434, 87.3439, 
88.1854, 89.184, 89.268, 86.9858, 83.4816, 79.6688, 75.8661, 
72.8118, 70.6629, 68.7551, 66.4837, 63.7729, 60.6434, 57.282, 
53.8787, 50.7307, 47.9352, 45.3046, 42.7569, 40.3978, 38.3338, 
36.7586, 35.6803, 34.6447, 33.2999, 31.8119, 30.5851, 29.431, 
28.1555, 26.8269, 26.2309, 25.5759, 25.072, 24.2856, 22.8561, 
20.5118, 18.0308), y = c(23.4243, 25.6442, 27.7958, 29.8634, 
32.0738, 36.5614, 41.7916, 46.6395, 48.9472, 49.506, 49.2499, 
48.5368, 48.8578, 51.1613, 54.5913, 57.7283, 60.0539, 60.9977, 
60.41, 57.8862, 54.1463, 51.7568, 50.2808, 49.1703, 47.4662, 
45.0721, 41.6802, 37.7387, 34.6061, 32.741, 31.3893, 29.7002, 
28.0538, 26.6927, 25.4476, 23.4242, 21.6142, 19.7793, 18.2789, 
17.2791, 16.7951, 16.1878)), class = "data.frame", row.names = c(NA, 
-42L))

cart2polar
假设 0 ,0 原点;我需要知道如何更改它。

我的原点是x和y

 y <- 0.23
 x <- 81.05

cart2polar <- function(x, y) {
  data.frame(theta = sqrt(x^2 + y^2), r = atan2(x,y))
 }
r signal-processing polar-coordinates atan
1个回答
0
投票

您只需从数据中减去原点即可。但是,您当前的功能是错误的。您将

theta
r
绕错了方向,并且将
atan2
中的参数绕错了方向。

修正后的函数应该是:

cart2polar <- function(x, y, x0 = 0, y0 = 0) {
  x <- x - x0
  y <- y - y0
  data.frame(r = sqrt(x^2 + y^2), theta = atan2(y, x))
}

在您的情况下,您将按如下方式使用它:

cart2polar(df$x, df$y, x0 = 0.23, y0 = 81.05)
© www.soinside.com 2019 - 2024. All rights reserved.