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

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

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轴的reflection)。 我知道,对于前两行代码我可以做的很less,因为这个部队没有X分量。 最后一行applyTorque是我需要操作的。 如果vector有4个分量,那么如何在Y轴上进行映射? 我有点math生疏

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

在这里输入图像说明

我发现在SceneKit中的确是这样的证据。

如果

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

是正确的用法,那么x是围绕x轴的逆时针旋转量(参见绿色圆圈箭头),对于yz 。 再一次,这是我最好的猜测,并且有可能SceneKit使用顺时针旋转。 因此, xyz一起确定了扭转力的旋转轴线。

这是一个更简单的方法来思考它。 xyz在上述三维空间中创build一个向量。 对象将围绕此向量逆时针旋转。

另一方面,是扭矩的大小 ,与旋转轴无关。

你的要求“在y轴上映射vector”实际上是yz平面上的reflection。 如果你仔细想想,你想要的是围绕y轴旋转相反的方向(否定y ),z也是一样的。

所以答案应该是:

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

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

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

所以你放在第二个位置的数字应该是y轴周围的扭矩值。

数字和它们在旋转力方面创造的东西之间可能存在一定的关系,但是我总是使用反复试验来发现什么是有效的。 有时候是很大的数字。

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