我正在创建地图,并计算线条的角度以确定道路的方向(NSEW)。
以下是用于计算线条角度的公式:
Math.tan(slope) / (Math::PI/180)
这一直有效,直到我的线的斜率为负。如何正确计算负斜率线的角度?
更新要计算线条的角度,我现在正在使用
Math.atan2(delta_y, delta_x) / (Math::PI/180)
这个问题似乎源于我从哪个点选择该行从/结束处开始。取决于我采取哪一种,一些是正确的,一些是不正确的,反之亦然。这是我创建的地图的图像:
我只是试图计算与边界框相交的线的角度。其中一个点总是线与边界框相交,另一个点总是在那之后。
我的原点(0,0)位于左上方。
答案 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