如果向量有 4 个分量,则在 y 轴上映射向量

Mapping a vector across the y-axis if it has 4 components

我正在节点上施加力和扭矩。这是我的代码:

myNode?.physicsBody?.applyForce(SCNVector3Make(0, -6, 4), atPosition: SCNVector3Make(0, 1, -1), impulse: true)
myNode?.physicsBody?.applyForce(SCNVector3Make(0, -2, 10), impulse: true)
myNode?.physicsBody?.applyTorque(SCNVector4Make(4, 2, 2.5, 1.6), impulse: true)

物体现在落下,然后从左向右移动。我希望它落下并从右向左移动(基本上反映了 y 轴上的第一次移动)。我发现对于前两行代码我无能为力,因为力没有 x 分量。最后一行 applyTorque 是我需要操作的那一行。如果向量有 4 个分量,你如何映射到 y 轴?我对数学有点生疏

applyTorque 函数的完整版本如下所示:

.applyTorque(SCNVector4Make(x:, y:, z:, w:), impulse:)

所以你放在第二个位置的任何数字都应该是围绕 y 轴的扭矩量。

数字和它们在物体上产生的旋转力之间可能存在某种关系,但我一直只是通过反复试验来找到可行的方法。有时是巨大的数字。

根据SceneKit documentation the SCNVector4参数指定方向(x,y,z向量分量)和大小(w向量分量) 以牛顿-米为单位的力。要反映所施加扭矩的方向,您所要做的就是反转大小。 (x, y, z, -magnitude)

我假设 x 轴是水平的,y 轴是垂直的,z 轴直接指向你(见下面的黑色箭头):

我发现evidence在SceneKit中确实是这样的

如果

applyTorque(SCNVector4Make(x, y, z, w), impulse: boolean)

是正确的用法,那么x就是绕x轴逆时针旋转的量(见绿色圆圈箭头),同理yz .同样,这是我最好的猜测,SceneKit 可能使用顺时针旋转。因此,xyz共同决定了扭力的旋转轴。

这是一种更简单的思考方式。 xyz 在上述 3D space 中创建矢量。对象将围绕该向量逆时针旋转。

w是力矩的大小,与旋转轴无关

您对 "map vector across the y-axis" 的请求实际上是在 yz 平面上的反射。仔细想想,你想要的是绕y轴旋转相反的方向(取反y),z也一样。

所以答案应该是:

myNode?.physicsBody?.applyTorque(SCNVector4Make(4, -2, -2.5, 1.6), impulse: true)