как преобразовать декартовы координаты в полярные с определенным началом?

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))
 }

1 ответ

Вы просто вычтете исходные точки из данных. Однако ваша текущая функция неверна. У тебя есть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)

Например, полярные координаты от начала координат будут выглядеть так:

      plot(df, xlim = c(0, 100), ylim = c(0, 100))
df2 <- cart2polar(df$x, df$y)
segments(0, 0, df2$r * cos(df2$theta), df2$r * sin(df2$theta))

Но из вашего нового происхождения будет:

      y <- 0.23
x <- 81.05

plot(df, xlim = c(0, 100), ylim = c(0, 100))
df2 <- cart2polar(df$x, df$y, x, y)
segments(x, y, x + df2$r * cos(df2$theta), y + df2$r * sin(df2$theta))

Другие вопросы по тегам