我知道这里有很多关于3D旋转的问题都已经得到了解答,但是它们似乎都涉及OpenGL中的旋转矩阵和四元数(而我并不在意是否会出现万向节锁定)。我需要获取一个点的3D坐标(例如:x,y,z),该点始终与原点保持相同的距离(我现在称之为“d”)。我的输入信息仅为鼠标在屏幕上移动的deltax和deltay。到目前为止,以下是我尝试过的方法:
首先:
(sq()是平方函数,abs()是绝对值函数。 pointZ应该是点的z坐标,在正z半球和负z半球之间的交界处除外。当它靠近边缘时,点会被拉伸超过x、y轴上应该始终存在的距离,并且在thetaxz的0.1-0.2弧度左右看起来随机地成为NAN或未定义状态)
我思考了一段时间,坦率地说,我很难理解四元数和旋转矩阵的概念,但如果你能向我展示如何使用它们生成实际的坐标,我会很乐意学习。我仍然希望可以在几个轴上使用一些三角函数。非常感谢您提前的任何帮助,如果需要更多信息,请告诉我。
提示/最后一分钟的想法:我认为这可能与z位置影响x和y位置有关,但我不确定。
编辑:我画了一个图:
首先:
thetaxz+=(omousex-mouseX)/( width );
thetaxy+=(omousey-mouseY)/( height);
第二点:pointX=cos(thetaxz)*d;
pointY=sin(thetaxy)*d;
(pointX是点的x坐标,pointY是y坐标)
第三步:
if(thetaxz)<PI){
pointZ=sqrt(sq(d)-sq(eyeX/d)-sq(eyeY/d));
}else{
pointZ=-sqrt(abs(sq(d)-sq(eyeX/d)-sq(eyeY/d)));
}
(sq()是平方函数,abs()是绝对值函数。 pointZ应该是点的z坐标,在正z半球和负z半球之间的交界处除外。当它靠近边缘时,点会被拉伸超过x、y轴上应该始终存在的距离,并且在thetaxz的0.1-0.2弧度左右看起来随机地成为NAN或未定义状态)
我思考了一段时间,坦率地说,我很难理解四元数和旋转矩阵的概念,但如果你能向我展示如何使用它们生成实际的坐标,我会很乐意学习。我仍然希望可以在几个轴上使用一些三角函数。非常感谢您提前的任何帮助,如果需要更多信息,请告诉我。
提示/最后一分钟的想法:我认为这可能与z位置影响x和y位置有关,但我不确定。
编辑:我画了一个图:
![enter image description here](https://istack.dev59.com/9y2zM.webp)