gpt4 book ai didi

math - 围绕原点进行 3d 旋转

转载 作者:行者123 更新时间:2023-12-04 11:58:05 25 4
gpt4 key购买 nike

我知道这里已经回答了很多关于 3d 旋转的问题,但它们似乎都在处理 OpenGL 中的旋转矩阵和四元数(而且我真的不在乎我是否得到万向节锁定)。我需要从原点获取一个点的 3d 坐标 EX:(x,y,z),该点的距离必须始终相同,我现在将其称为“d”。我输入的唯一信息是鼠标在屏幕上的 deltax 和 deltay。到目前为止,这是我尝试过的:

第一的:

thetaxz+=(omousex-mouseX)/( width ); 
thetaxy+=(omousey-mouseY)/( height);

(thetaxy 是 x,y 轴上的弧度角和 x,z 轴上的 thetaxz 角)
(我限制两个角度,如果它们小于或等于 0,它们等于 2*PI)

第二:
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 半球之间的交叉处之外。当它接近边缘时,该点被拉伸(stretch)得比它在 x 和 y 中始终应该处于的距离更远并且看似随机地在 thetaxz 的 0.1-0.2 弧度左右,z 坐标变为 NAN 或未定义)

我已经考虑了一段时间,老实说,我很难围绕四元数和旋转矩阵的概念扭曲我的头脑,但是如果你能告诉我如何使用它们来生成实际坐标,我会很高兴学习。如果我可以在几个轴上使用一些三角函数,我仍然更喜欢它。提前感谢您的帮助,如果您需要更多信息,请询问。

提示/最后一分钟的想法:我认为这可能与影响 x 和 y 位置的 z 位置有关,但我不确定。

编辑:我画了一个图表:
enter image description here

最佳答案

如果你真的想在这方面取得任何成功,你将不得不硬着头皮去了解rotation matrices。和/或quaternion rotations .可能有其他方法可以做你想做的事,但使用旋转矩阵和四元数旋转仅仅是因为它们被广泛理解并且是表达和应用旋转到向量的最简单方法。有人可以提出的任何其他表示都可能是对其中之一或两者进行更复杂的重新表述。实际上可以显示旋转是一个linear transformation因此可以表示为 matrix .四元数旋转只是在 3D 中旋转矢量的一种简化方式,因此具有等效的矩阵表示。
也就是说,听起来您有兴趣通过单击鼠标并以自然方式旋转来抓取场景中的对象。如果是这种情况,您应该查看 ArcBall方法(有numerous examples你可能想看看)。这仍然需要您了解一些四元数。您还会发现对 linear algebra 的基本方面的理解至少是最低限度的。会有帮助的。
更新 : 根据您的图表及其包含的注释,您似乎真正想做的只是转换 Spherical CoordinatesCartesian Coordinates .只要我们同意这个符号,这很容易。设θ为你称XY的角度,即X轴绕Z轴旋转的角度;这称为方位角,将在 [0, 2π) 弧度或 [0°, 360°) 范围内。设 Φ 是 XY 平面和向量之间的角度;这称为仰角,将在 [-π/2, +π/2] 或 [-90°, +90°] 范围内,它对应于您称为 XZ 角的角度(在XZ 平面关于 Y 轴)。还有其他约定,因此请确保您保持一致。无论如何,转换很简单:

x = d∙cos(Φ)∙cos(θ)
y = d∙cos(Φ)∙sin(θ)
z = d∙sin(Φ)

关于math - 围绕原点进行 3d 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8602408/

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