gpt4 book ai didi

math - 点击一个球体

转载 作者:行者123 更新时间:2023-12-01 12:47:01 25 4
gpt4 key购买 nike

我有一个以正交投影为中心绘制的单位球体(半径为 1)。

球体可以自由旋转。

如何确定用户点击的球体上的点?

enter image description here

最佳答案

给定:

  • 显示器的高度和宽度
  • 投影圆的半径,以像素为单位
  • 用户点击点的坐标

假设左上角为 (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 子午线不直接面向观察者,则从经度中减去旋转角度。

关于math - 点击一个球体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14964257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com