如果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轴的逆时针旋转量(参见绿色圆圈箭头),对于y
和z
。 再一次,这是我最好的猜测,并且有可能SceneKit使用顺时针旋转。 因此, x
, y
和z
一起确定了扭转力的旋转轴线。
这是一个更简单的方法来思考它。 x
, y
和z
在上述三维空间中创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)