12

私はインディー ビデオ ゲームを開発していますが、コントローラーのサムスティックの可動範囲が円形であるため、「円形」座標を返すという前提で操作しています。つまり、(半径 1 の) 円形領域に制限されたデカルト座標です。実際、座標は「正方形」です。たとえば、右上のサムスティックの位置は x=1,y=1 として登録されます。座標をデカルト座標から極座標に変換すると、マグニチュードが 1 を超えることがあります。これは、プレイヤーが垂直方向または水平方向よりも斜め方向に速く移動できるという効果があります。

明確にするために、アナログ サムスティックの位置を方向とマグニチュードの観点から記録したいと思います。マグニチュードは 0 ~ 1 です。サムスティックは正方形の平面上の座標を返すため、座標をデカルト座標から極座標に変換するだけです。では十分ではありません。座標空間を変換する必要があると思いますが、それは私の猿の脳の限界に近づいています。

4

3 に答える 3

19

正方形を円にマッピングするを参照してください。マッピングの優れた視覚化もあります。あなたは得る:

xCircle = xSquare * sqrt(1 - 0.5*ySquare^2)
yCircle = ySquare * sqrt(1 - 0.5*xSquare^2)
于 2009-10-25T19:40:17.520 に答える
14

マッピングは一意ではありません。この質問には、他にも多くの解決策があります。

たとえば、このマッピングも機能します

u = x √(x² + y² - x²y²) / √(x² + y²)

v = y √(x² + y² - x²y²) / √(x² + y²)

ここで、(u,v)は円板座標、(x,y)は正方座標です。

百聞は一見に如かずということで、マッピングの非固有性とその逆を説明するためのいくつかの画像を次に示します。

円形のブレイディ束


二乗ボストン・セルティックス

For a C++ implementationこの他のマッピングの詳細については、http://squircular.blogspot.com/2015/09/fg-squircle-mapping.html に移動して、マッピング結果のその他の画像について http://squircular.blogspot.com を
参照
してください。

証明と導出を伴うさまざまなマッピング方程式について説明している論文については、「ディスクを二乗するための分析方法」も参照してください。

于 2016-02-13T22:03:24.663 に答える
0

各値を大きさで割り、すべての値を単位ベクトルに正規化します。

magn = sqrt(x * x + y * y);
newx = magn > 1.0 ? x / magn : x;
newy = magn > 1.0 ? y / magn : y;

ただし、これにより、内部の値を正規化する代わりに、マグニチュードをクリッピングする効果が生じる場合があります。つまり、コントローラーを左上に「完全に」押し込んだ場合と、コントローラーを左上にほぼ完全に押し込んだ場合で、同じ値が得られます。同じ方向。

于 2009-10-25T19:36:47.760 に答える