[英]how to simplify angles (in degrees) in R?
我正在构建手动/副手/判断因子旋转功能。
显然,旋转二维坐标系270°
与-90°
相同, 720°
与0°
相同。
我想简化用户输入,使所有值都在-180°
和180°
。
我怎样才能在R中优雅地做到这一点?
Ps。:或者存储从0°
到360°
值更有意义吗? 用户可能想要按时钟和逆时针旋转,所以我认为从UX的角度来看-180
到180
可能更直观。
就像是?
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.