- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我想在 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 :
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/
好的,我想旋转我在这个方法中拥有的 PVector。此方法用 PVector 的 x 和 y 替换 posX 和 posY。运动是由来自arduino的操纵杆决定的,它在x和y方向上移动图像,但我想根
如果我的粒子(类)的位置位于边缘,则尝试返回 PVector。这会打印错误“该方法必须返回 PVector 类型的结果” PVector edges() { if (pos.x width - 10
我一直在处理游戏,我遇到了这个问题:我正在尝试制作一个星星飞过的背景,我有这样的类(class): public class Star { PVector position; float sp
我正在处理一个学校项目,但遇到了一些问题。我有一个 bulletList 数组,它在我的 draw() 类中循环,其中包含按下空格键时初始化的 Bullet 对象。 if(key==' '){ flo
我正在构建一个草图,目前有两个类;步行者和发射器。步行器进行随机的柏林噪声步行,并随着时间的推移逐渐消失。发射器是发射步行者的点,并具有描述发射器位置的 PVector“位置”和描述每帧动画发射的步行
我有一个标准化的PVector,它表示从原点开始的方向: PVector dir = new PVector(-0.1, 0.8, 0.3); 我想获得该方向的 X、Y 和 Z 角度,这样我就可以使用
我想在 PVector 类中使用 heading() 函数,但我使用的是 P3D 并且我的 PVector 有一个 x、y 和 z。我将如何重写此函数以使其适用于 3D 空间?我的目标是做类似的事情:
显然在 Processing 3.0+ 中他们已经弃用了 PVector.get()。出于好奇,如果 PVector.get() 被弃用,我们应该从现在开始制作 PVectors 的深拷贝吗? 由于此
我的代码遇到了一些问题。 PVector vel; vel = new PVector(random(-5, 5), random(-5, 5)); PVector center = vel.get(
我是一名优秀的程序员,十分优秀!