我希望将方位角转换为梯度,例如将“ 045”转换为1。我的代码如下:
bearing =
grad = 1/tan(bearing)
有两个问题
如何更改r的度数(或者我自己必须将其转换)以及如何避免方位角是90的倍数的情况
一些预期的输入和输出示例如下:
000 -> Inf
062 -> 1.88
180 -> -Inf
301 -> -1.66
答案 0 :(得分:0)
以下功能会将轴承转换为梯度
library(dplyr)
dtr <- function(degrees) { degrees * (pi/180) } # Converts degrees to radians
btg <- function(bearing) {
if( bearing > 180 ) { bearing <- bearing - 180 } # Since the gradient of bearing x and x - 180 are the same when x > 180
if( bearing == 0 ) { gradient <- Inf } # Replace Inf with NA_character_ if preferred
if( bearing == 90 ) { gradient <- 0 }
if( bearing == 180 ) { gradient <- Inf }
if( !bearing %in% c(0, 90, 180)) {
if(bearing < 90 ) {
gradient <- sin(dtr(90 - bearing)) / sin(dtr(180-bearing))
}
if(bearing > 90 ) {
gradient <- (sin(dtr(90 - bearing)) / sin(dtr(180-bearing)))
}
}
return(gradient)
}
例如
bearings <- c(30, 45, 90, 135, 170, 179, 180, 235, 250, 290, 360) # We can test the btg function on some bearings
for (i in 1:length(bearings)) {
gradients[i] <- btg(bearings[i])
}
data.frame(bearings, gradients)