繁体   English   中英

如何简化R中的角度(以度为单位)?

[英]how to simplify angles (in degrees) in R?

我正在构建手动/副手/判断因子旋转功能。

显然,旋转二维坐标系270°-90°相同, 720°相同。

我想简化用户输入,使所有值都在-180°180°

我怎样才能在R中优雅地做到这一点?

Ps。:或者存储从360°值更有意义吗? 用户可能想要按时钟和逆时针旋转,所以我认为从UX的角度来看-180180可能更直观。

就像是?

x <- 90 + c(0,360,720)
x
# [1]  90 450 810

(x*pi/360) %% pi
# in radians:
#[1] 0.7853982 0.7853982 0.7853982

# in degrees
((x*pi/360) %% pi)*360/pi
#[1] 90 90 90

你只是想让所有数字都是他们的余额mod 360吗?

所以,你可以做各种各样的总和,总是得到0到360之间的答案。

to_degrees <- function(x) x %% 360 
to_degrees(720)
[1] 0
to_degrees(-90)
[1] 270
to_degrees(300 + 100)
[1] 40

编辑:

如果你想要数字在-180和180之间,最后只需要拿走180。

to_degrees <- function(x) x %% 360 -180

现在

  • 0 - > -180

  • 360 - > 180。

基于@ Pascal的答案,这是一个略微扩展的版本(笨拙?)将角度转换为-180°180°的范围(出于UX原因):

  simplify.angle <- function (angle.raw) {  # simplify angles to -180° to 180°
  angle.360 <- ((angle.raw*pi/360) %% pi)*360/pi
  if (angle.360 > 180) {
    angle.simple <- angle.360 - 360
  } else if (angle.360 < -180) {
    angle.simple <- angle.360 + 360
  } else {
    angle.simple <- angle.360
  }
  return(angle.simple)

}

这会产生:

> sapply(c(-90, 270, 630, -450, -181), simplify.angle)
[1] -90 -90 -90 -90 179

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM