在 Python 中计算直线(斜率为 x)和水平之间的角度(度数)

Posted

技术标签:

【中文标题】在 Python 中计算直线(斜率为 x)和水平之间的角度(度数)【英文标题】:Calculate angle (degrees) in Python between line (with slope x) and horizontal 【发布时间】:2016-06-19 22:07:35 【问题描述】:

我需要计算一条线与水平线之间的角度。我的高中数学似乎不及格。

import matplotlib.pyplot as plt
import numpy as np

x = [8450.0, 8061.0, 7524.0, 7180.0, 8247.0, 8929.0, 8896.0, 9736.0, 9658.0, 9592.0]
y = range(len(x))

best_fit_line = np.poly1d(np.polyfit(y, x, 1))(y)

slope = (y[-1] - y[0]) / (x[-1] - x[0])
angle = np.arctan(slope)

print 'slope: ' + str(slope)
print 'angle: ' + str(angle)

plt.figure(figsize=(8,6))
plt.plot(x)
plt.plot(best_fit_line, '--', color='r')
plt.show()

结果如下:

slope: 0.00788091068301
angle: 0.00788074753125

我需要水平线和红色虚线之间的角度。光看它,它可能应该在 30-45 度之间。我做错了什么?

* 关于slope = (y[-1] - y[0]) / (x[-1] - x[0]),我也尝试过numpy.diffscipy.stats.linregress,但也没有成功。

【问题讨论】:

您忘记考虑图表的比例。 另外,请使用arctan2! 嗨 jtbandes,我如何计算图表的比例? 【参考方案1】:

这条线在 x 方向上从 0 到 9,在 y 方向上从 7500 到 9500。因此,您的 slope 只有 0.00788091068301 而不是 0.57 约 30°。您的计算是正确的,但最好使用 arctan2:

angle = np.rad2deg(np.arctan2(y[-1] - y[0], x[-1] - x[0]))

【讨论】:

以上是关于在 Python 中计算直线(斜率为 x)和水平之间的角度(度数)的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ1007 水平可见直线

算法计算几何

_bzoj1007 [HNOI2008]水平可见直线单调栈

如何在 Python 中有效地生成具有随机斜率和截距的直线?

[BZOJ1007][HNOI2008]水平可见直线 计算几何

python怎么根据斜率计算点到线的距离