我有一個角度,形成一個完整的轉角陣列x
,從-90到270 (可以用其他方法定義,如0到360或-180到180),步驟1或其他。使用asin函數將完整轉角x角度值映射到半圈,如何將它們鏡像回來?
asin
功能有效只有在-90和+90之間。
因此,角度< -90或> 90將被「映射」在這些值之間。
E.g. y
= some_asin_func(over_sin(x
))將以始終在-90和+90之間的y
值結束。所以y
卡在-90到+90之間。
我需要檢索到X-輸入y
相關的,因爲它是曖昧尚未:例如,該功能在(x
)可以得到同樣的y
值x = 120
和x = 60
,或x = -47
和x = 223
。這不是我想要的。
換一種方式;我需要y
作爲x
做了一個完整的轉變,範圍從x
開始到x
結束。
的圖像會更好:
這裏,之間-90(左)x
範圍至270(曲線圖的右側)。
曲線的有效部分在x=-90
和x=+90
之間(圖的左半部分)。
所有其他值都像y = 90或y=-90
鏡像。
對於x=180
例如,我得到y=0
,它應該是y=180
。
對於x=270
,我有y=-90
,但它應該是y=270
,因此+360。
下面是一個代碼示例:
A = 50 # you can make this value vary to have different curves like in the images, when A=0 -> shape is triangle-like, when A=90-> shape is square-like.
x = np.linspace(-90,270,int(1e3))
u = np.sin(math.pi*A/180)*np.cos(math.pi*x/180)
v = 180*(np.arcsin(u))/math.pi
y = 180*np.arcsin(np.sin(math.pi*x/180)/np.cos(math.pi*v/180))/math.pi
plt.plot(x,y)
plt.grid(True)
再次,圖的第一左半部分是完全正確的。 右半也是它的行爲是正確的,但在決賽中,在這裏,它必須在位置y=+90
時x>90
鏡像約一個水平軸,像這樣:
也就是說,它的功能等被鏡像約Y = -90和Y = + 90爲y
其中x
超出該範圍的[-90,+ 90],只有其中其中x
在該範圍[-90,+ 90]的。
欲未鏡它的有效外[-90,+ 90]範圍:
約y=-90
其中y
低於-90
約y=+90
其中y
大於90
當然,每完成一次模數。
這裏的其它例子,其中x
範圍從-180到180和所需的行爲:
然而:
尋求:
我有第一現在測試了一些簡單的東西:
A = 50
x = np.linspace(-180,180,int(1e3))
u = np.sin(math.pi*A/180)*np.cos(math.pi*x/180)
v = 180*(np.arcsin(u))/math.pi
y = 180*np.arcsin(np.sin(math.pi*x/180)/np.cos(math.pi*v/180))/math.pi
for i,j in np.ndenumerate(x):
xval = (j-180)%180-180
if (xval < -90):
y[i] = y[i]-val
elif (xval > 90):
y[i] = y[i]+val
plt.plot(x,y);
plt.grid(True)
plt.show()
不工作在所有但我認爲背景思想是有...
我想這可能是某種模招的,但不能弄明白。
我不太清楚,如果我明白你想要做什麼。你是否希望單位圓上的x-y對作爲極座標中角度的函數? –
背景可以看作是我想根據它在相對於北方的赤道平面上的角度檢索一個恆星的方位角(在水平面上測量)。所以我需要根據完整的其他0-360個x值的函數檢索完整的0-360個y值。 –
我是否正確理解問題的核心:您是否想要像第二個圖表中那樣定義曲線? – kazemakase