5

デカルト座標を球座標に、またはその逆に変換するための 2 つの関数を作成しようとしています。変換に使用した方程式は次のとおりです (このウィキペディアのページにもあります)。

ここに画像の説明を入力

ここに画像の説明を入力

これが私のspherical_to_cartesian機能です:

def spherical_to_cartesian(theta, phi):
    x = math.cos(phi) * math.sin(theta)
    y = math.sin(phi) * math.sin(theta)
    z = math.cos(theta)
    return x, y, z

これが私のcartesian_to_spherical機能です:

def cartesian_to_spherical(x, y, z):
    theta = math.atan2(math.sqrt(x ** 2 + y ** 2), z)
    phi = math.atan2(y, x) if x >= 0 else math.atan2(y, x) + math.pi
    return theta, phi

そして、ここにドライバーコードがあります:

>>> t, p = 27.500, 7.500
>>> x, y, z = spherical_to_cartesian(t, p)
>>> print(f"Cartesian coordinates:\tx={x}\ty={y}\tz={z}")
Cartesian coordinates:  x=0.24238129061573832   y=0.6558871334524494    z=-0.7148869687796651
>>> theta, phi = cartesian_to_spherical(x, y, z)
>>> print(f"Spherical coordinates:\ttheta={theta}\tphi={phi}")
Spherical coordinates:  theta=2.367258771281654 phi=1.2168146928204135

シータファイの値が初期値と異なる理由がわかりません (出力値が入力値に近くさえありません)。見えないコードで間違いを犯しましたか?

4

2 に答える 2

4

すべての三角関数はラジアンを期待していますが、角度を度数で与えているようです。で度数を掛けるmath.pi/180とラジアンが得られ、ラジアンに で掛けると度数180/math.piが得られます。

于 2021-10-06T09:28:33.203 に答える
-1

結果は正しいですが、モジュロ pi 演算を使用して値を確認する必要があります。

パッケージ内の三角関数は、mathラジアン単位の入力角度を想定しています。これは、角度が2*pi加算または減算によって得られる他の値よりも大きく、同等であることを意味します2*pi(これは、ラジアンでの完全な回転も表します)。

特に、あなたはそれを持っています:

>>> 27.5 % (2*math.pi)
2.367258771281655

>>> 7.500 % (2*math.pi)
1.2168146928204138
于 2021-10-06T09:28:45.083 に答える