球面座標をデカルト座標に変換するにはどうすればよいですか?


10

これがどのように達成されるかについて誰かが私を正しい方向に向けることができますか?3D数学/幾何学はしばしば私を投げます。

私はこのようなものを探しています(理想的にはC#で):

public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
   return ????;
}

回答:


5

http://blog.nobel-joergensen.com/2010/10/22/spherical-coordinates-in-unity/

public static void SphericalToCartesian(float radius, float polar, float elevation, out Vector3 outCart){
    float a = radius * Mathf.Cos(elevation);
    outCart.x = a * Mathf.Cos(polar);
    outCart.y = radius * Mathf.Sin(elevation);
    outCart.z = a * Mathf.Sin(polar);
}


public static void CartesianToSpherical(Vector3 cartCoords, out float outRadius, out float outPolar, out float outElevation){
    if (cartCoords.x == 0)
        cartCoords.x = Mathf.Epsilon;
    outRadius = Mathf.Sqrt((cartCoords.x * cartCoords.x)
                    + (cartCoords.y * cartCoords.y)
                    + (cartCoords.z * cartCoords.z));
    outPolar = Mathf.Atan(cartCoords.z / cartCoords.x);
    if (cartCoords.x < 0)
        outPolar += Mathf.PI;
    outElevation = Mathf.Asin(cartCoords.y / outRadius);
}

正確には何が起こったのですか...ユニティ数学ライブラリなしでこれを行う方法を理解する必要があります.... Net用の数学ライブラリに関する推奨事項...またはこれはどこかに組み込まれていますか?私はこれらの関数をdoubleに対してのみ表示できました。
戦争

10

  • r:半径距離
  • θ:傾き
  • φ:方位角

ウィキペディア経由

public Vector3 getCartesianFor(float radius, float inclination, float azimuth)
{
   return new Vector3(radius*Sin(inclination)*Cos(azimuth), radius*Sin(inclination)*Sin(azimuth), radius*Cos(inclination));
}

球面座標


答えの中で(リテラル)ギリシャ語の意味について詳しく説明する必要があります。
セスバティン2014

@SethBattin提案ありがとうございます!答えが更新されました。
MLM

2
傾きと呼ばれるものは、おそらくOPが標高に対して意味するものの補足です。ベクトルからz軸への角度ではなく、xy平面からベクトルへの角度。
MestreLion 2014

0

polarベクトルの大きさを意味し、elevationベクトルとxy平面の間の角度として定義されている場合(名前が示すとおり)、関数は次のようになります。

public Vector3 getCartesianFor(float elevation, float asimuth, float polar)
{
   return new Vector3(polar*Cos(elevation)*Cos(asimuth),
                      polar*Cos(elevation)*Sin(asimuth),
                      polar*Sin(inclination));
}

これはMLMの回答と非常に似ていることに注意してくださいelevation。すべては角度の定義方法に依存します。関数テンプレートの署名も尊重しましたが、いくつかの変更を提案します。

  • asimuth タイプミスです。正しいスペルは azimuth
  • polar通常、2D座標(r、θ)を指します。ベクトルの大きさは一般に次のように呼ばれますradius
  • より一般的な注文はradius、最初のパラメータとして持っています。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.