gpt4 book ai didi

java - 用于 3D 旋转的 PVector Heading()

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:13:51 27 4
gpt4 key购买 nike

我想在 PVector 类中使用 heading() 函数,但我使用的是 P3D 并且我的 PVector 有一个 x、y 和 z。我将如何重写此函数以使其适用于 3D 空间?我的目标是做类似的事情:

      size(100, 100, P3D);
PVector v = new PVector(.2, .11, .54);
rotate( v.heading() ); //set rotation from PVector named v
line(0, 0, 10, 0); //draw line that will be rotated in correct direction

上面的代码没有在 3D 空间中显示正确的旋转,因为 v.heading() 只适用于 2D 坐标空间。如何使用 rotateX()、rotateY()、rotateZ() 实现此目的?如果可能,我想避免使用四元数并使用旋转函数。

提前致谢!

最佳答案

在 2D 中使用 heading() 函数是将 2D 笛卡尔坐标 (x,y) 转换为 2D 极坐标(半径、角度)。极坐标的 3D 版本是 spherical coordinates :

spherical coordinates example

3D 点 P 可以表示为三个线性坐标 (x,y,z) 或一个线性坐标和两个角度 (rho, theta, phi)。 Rho 是 vector 的长度,theta 是 x-y 平面中的角度,phi 是进入 z 平面的角度。这些等式描述了转换:

rho = sqrt(x^2 + y^2 + z^2)

phi = arccos(z/rho)

theta = arctan(y/x)

您应该能够使用这些角度的 rotateX() 等函数。请注意,这使用角度名称 theta 和 phi 的数学约定;在物理学中,这些标签与上面显示的相反。

关于java - 用于 3D 旋转的 PVector Heading(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23856489/

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