我正在创建一个地图,并计算线的角度来确定道路的方向(NSEW)。
下面是我用来计算直线角度的公式:
Math.tan(slope) / (Math::PI/180)
直到我的线的斜率为负如何正确计算负斜率直线的角度?
更新以计算直线的角度,我现在使用

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

这个问题似乎源于我选择的直线起点/终点根据我选哪一个,有些是正确的,有些不是,反之亦然这是我创建的地图的图像:
ruby - 计算斜率为负的直线的角度-LMLPHP
我只想计算与边界框相交的线的角度其中一个点总是直线与边界框相交的地方,另一个点总是刚好在边界框之后。
我的原点(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

10-06 14:56