3

正射影の中心に描かれた単位球 (半径 1) があります。

球は自由に回転できます。

ユーザーがクリックした球上のポイントを特定するにはどうすればよいですか?

ここに画像の説明を入力

4

2 に答える 2

3

与えられた:

  • モニターの高さと幅
  • 投影された円の半径 (ピクセル単位)
  • ユーザーがクリックした点の座標

左上隅を (0,0) とすると、右に移動すると x の値が増加し、下に移動すると y の値が増加します。

ユーザーのクリック ポイントを地球の座標空間に変換します。

userPoint.x -= monitor.width/2
userPoint.y -= monitor.height/2
userPoint.x /= circleRadius
userPoint.y /= circleRadius

交点の z 座標を見つけます。

//solve for z
//x^2 + y^2 + z^2 = 1
//we know x and y, from userPoint
//z^2 = 1 - x^2 - y^2
x = userPoint.x
y = userPoint.y

if (x^2 + y^2 > 1){
    //user clicked outside of sphere. flip out
    return -1;
}

//The negative sqrt is closer to the screen than the positive one, so we prefer that.
z = -sqrt(1 - x^2 - y^2);

(x,y,z) の交点がわかったので、緯度と経度を見つけることができます。

ユーザーに向いている地球の中心を0E 0Nとすると、

longitude = 90 + toDegrees(atan2(z, x));
lattitude = toDegrees(atan2(y, sqrt(x^2 + z^2)))

0E 子午線が視聴者に直接向かないように球体を回転させた場合は、経度から回転角度を差し引きます。

于 2013-02-19T18:38:43.480 に答える
1

考えられるアプローチの 1 つは、行と列で構成される三角形から球を生成することです。それらは目に見えないこともあります。そして、それらの三角形をマウス ピック レイでヒット テストします。

緯度経度グリッド

この画像の緯度/経度グリッドを参照してください。グリッド セルごとに、2 つの三角形が必要です。

于 2013-02-19T18:33:04.840 に答える