簡體   English   中英

計算直線的角度(度)

[英]Calculate angle (degree) of a straight line

我試圖確定兩點直線的角度,我在網上遇到了很多解決方案,但沒有一個對我有用,考慮這段代碼

import matplotlib.pyplot as plt
data = np.array([7405.,7447.4,7433.99,7410.,7443.15,7429.4,7590.03,7550.,7566.32,7619.62,7549.71,7551.8,7530,7522.99,7499.75,7453.99,7542.16,7564.,7552.77,7552])
y = [7606.672474,7570.240928]
plt.plot(data)
plt.plot([6,17], y)
plt.show()

在此處輸入圖片說明

目標線是y ,僅通過觀察它就應該在 -5 度左右。 似乎大多數在線解決方案都表明我們可以通過以下方式找到角度

degree = np.math.atan2(y[-1] - y[0], x[-1] - x[0])
degree = np.degrees(degree)

為簡單起見,我將 y 的其他值省略到第一個和最后一個點,因此這里的x[-1] - x[0]部分將是 11=17-6,即 y 線穿過 x 軸的長度,這是大多數在線解決方案所建議的,但是所有方法都未能為此找到正確的角度,我應該注意到,在我的測試期間,某些方法似乎為給定的數據單元提供了正確的角度,例如,在不同的數據上完全失敗單位喜歡

data = [52.3384984,53.04757978,52.04276249,51.77348257,49.93056673,52.24062341,55.74022485,60.77761392,60.89290148,60.1995072,60.40524964,59.00590344,59.67589831,56.49266698,49.02464746,51.53876823,57.77368203,59.48092106,56.63155446,56.0648491 ]
y = [51.337288,50.331895]
plt.plot(data)
plt.plot([3,15], y)
plt.show()

我還嘗試對數據進行最小-最大歸一化,但沒有成功,所以考慮到我們有一條線的第一個和最后一個點及其長度,我們如何或是否有可能以度為單位確定它的角度?

有兩個角度你需要理解。 第一個是根據數據計算的,第二個是根據數字計算的。

第一

您編寫的代碼正在計算第一個:

degree = np.math.atan2(y[-1] - y[0], x[-1] - x[0])
degree = np.degrees(degree)

它是delta_y = y[-1] - y[0] = -36.43 , delta_x = x[-1] - x[0] = 11

degree = -73.20如果您在腦海中畫一個三角形,這完全有意義。

第二個

但是,您可能會問我您正在觀看 -5 度左右的線。 這是涉及計算顯示比例的第二個,(注意 y 軸和 x 軸具有不同的單位長度(以英寸為單位))。 在這里,我找到了一個單獨的問題來幫助您計算。

from operator import sub
def get_aspect(ax):
    # Total figure size
    figW, figH = ax.get_figure().get_size_inches()
    # Axis size on figure
    _, _, w, h = ax.get_position().bounds
    # Ratio of display units
    disp_ratio = (figH * h) / (figW * w)
    # Ratio of data units
    # Negative over negative because of the order of subtraction
    data_ratio = sub(*ax.get_ylim()) / sub(*ax.get_xlim())

    return disp_ratio / data_ratio

因此,您需要乘以該比率才能獲得線端點的曼哈頓距離。

ax = plt.gca()
ratio = get_aspect(ax)
degree = np.math.atan2((y[-1] - y[0])*ratio, x[-1] - x[0])
degree = np.degrees(degree)

結果是 -4.760350735146195,大約是 -5。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM