计算具有负斜率的线的角度

时间:2017-02-13 18:22:38

标签: ruby math trigonometry

我正在创建地图,并计算线条的角度以确定道路的方向(NSEW)。

以下是用于计算线条角度的公式:

Math.tan(slope) / (Math::PI/180)

这一直有效,直到我的线的斜率为负。如何正确计算负斜率线的角度?

更新要计算线条的角度,我现在正在使用

Math.atan2(delta_y, delta_x) / (Math::PI/180)

这个问题似乎源于我从哪个点选择该行从/结束处开始。取决于我采取哪一种,一些是正确的,一些是不正确的,反之亦然。这是我创建的地图的图像:

enter image description here

我只是试图计算与边界框相交的线的角度。其中一个点总是线与边界框相交,另一个点总是在那之后。

我的原点(0,0)位于左上方。

1 个答案:

答案 0 :(得分:0)

我能够通过以下方式解决这个问题。请记住,这是一个倒置轴,其中原点(0,0)位于左上角。

def angle(point1, point2)
  return 90 if vertical?(point1, point2)
  return 0 if horizontal?(point1, point2)
  point1, point2 = [point1, point2].sort_by(&:x)
  delta_x = point1.x - point2.x
  delta_y = point1.y - point2.y

  if point1.y > point2.y # inverted axis/origin
    Geometry.to_degrees(Math.atan(delta_y / delta_x)).abs
  else
    # Add 90 degrees when angle is in 3rd quadrant
    Geometry.to_degrees(Math.atan(delta_x / delta_y)).abs + 90
  end
end