如何使用R将方位(度)转换为坡度(斜率)?

时间:2018-07-24 09:03:25

标签: r trigonometry

我希望将方位角转换为梯度,例如将“ 045”转换为1。我的代码如下:

bearing = 
grad = 1/tan(bearing)

有两个问题

  • 假定方位角为弧度
  • 如果方位角是90的任意倍数,则方程将失败

如何更改r的度数(或者我自己必须将其转换)以及如何避免方位角是90的倍数的情况

一些预期的输入和输出示例如下:

000 -> Inf 
062 -> 1.88
180 -> -Inf
301 -> -1.66

1 个答案:

答案 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)