如果矢量有4个分量,则将矢量映射到y轴

时间:2015-09-12 06:55:25

标签: ios scenekit

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

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轴上绘图?我对数学有点生疏

3 个答案:

答案 0 :(得分:6)

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

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

因此,您放在第二个位置的任何数字都应该是围绕y轴的扭矩量。

数字和它们在对象上的旋转力方面创造的关系可能存在关系,但我总是只是使用反复试验找到有效的方法。有时它是巨大的数字。

答案 1 :(得分:4)

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

enter image description here

我发现evidence在SceneKit中确实是这种情况。

如果

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

是正确的用法,然后x是围绕x轴逆时针旋转的量(请参阅绿色圆圈箭头),yz也是如此。再次,这是我最好的猜测,SceneKit可能使用顺时针旋转。因此,xyz共同决定了扭力的旋转轴。

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

另一方面,

w是扭矩的幅度,与旋转轴无关。

您对"在y轴上映射矢量的请求"实际上是横跨yz平面的反射。如果你考虑一下,你想要的是围绕y轴旋转相反的方向(否定y)和z相同的方向。

所以答案应该是:

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

答案 2 :(得分:3)

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