亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求 x 軸與單位圓上的向量之間的角度

求 x 軸與單位圓上的向量之間的角度

慕容森 2024-01-15 17:12:52
[1,0]我有一個函數可以找到單位圓向量和單位圓上的向量之間的角度。import numpy as npdef angle(a):    b = [0,1]    if a[1] >= 0:        return round(np.degrees(np.arccos(np.dot(a, b)/ (np.linalg.norm(a) * np.linalg.norm(b)))), 2)    else:        return 180 + round(np.degrees(np.arccos(np.dot(a, b)/ (np.linalg.norm(a) * np.linalg.norm(b)))), 2)print(angle(np.array([1,0])))90.0print(angle(np.array([-4,2])))63.43 # This value should be 150print(angle(np.array([-1,0])))90.0 # This value should be 180print(angle(np.array([0,-1])))360.0 # This value should be 270如何確定輸入a始終是二維向量?如何更改代碼以使 x 軸下方的向量(即負 y 值)顯示正確的值?
查看完整描述

3 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊

你的 x 向量錯了。它應該是

b = [1,0]

假設第一個坐標是 x 軸,第二個坐標是 y 軸。如果輸入正確的 b 向量,所有計算都會按預期進行。


查看完整回答
反對 回復 2024-01-15
?
森欄

TA貢獻1810條經驗 獲得超5個贊

定義需要輸入的函數的一種方法是將兩者保留為單獨的參數(這也修復了一些錯誤并簡化了獲取角度值的邏輯):


def angle(x, y):

    

    rad = np.arctan2(y, x)

    degrees = np.int(rad*180/np.pi)

    if degrees < 0:

        degrees = 360 + degrees

    return degrees

順便說一句,atan2輸入順序y, x很容易混淆。單獨指定它們的一個優點是可以幫助避免這種情況。如果您想將輸入保留為數組,類似這樣的內容可以幫助您驗證長度:


def angle(a):

    

    if len(a) != 2:

        raise IndexError("vector a expected to be length 2")        

    x = a[0]

    y = a[1]

    rad = np.arctan2(y, x)

    degrees = np.int(rad*180/np.pi)

    if degrees < 0:

        degrees = 360 + degrees

    return degrees


查看完整回答
反對 回復 2024-01-15
?
偶然的你

TA貢獻1841條經驗 獲得超3個贊

我的壞處只是注意到它實際上是 numpy 數組,在這種情況下:if isinstance(x, np.ndarray) and x.shape[0] == 2

來自評論:x.ndim == 2聽起來更好。


查看完整回答
反對 回復 2024-01-15
  • 3 回答
  • 0 關注
  • 201 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號