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

pot*_*ato 9 ios scenekit

I am applying a force and a torque on an node. This is my code:

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)
Run Code Online (Sandbox Code Playgroud)

该物体现在倒下并随后从左向右移动.我希望它从右向左移动(基本上反映了第一次移动穿过y轴).我发现我对前两行代码的处理很少,因为力没有x分量.最后一行applyTorque是我需要操纵的那一行.如果矢量有4个分量,你如何在y轴上绘图?我对数学有点生疏

Con*_*sed 6

applyTorque函数的更完整版本看起来像这样:

.applyTorque(SCNVector4Make(x:, y:, z:, w:), impulse:)
Run Code Online (Sandbox Code Playgroud)

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

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


mar*_*aft 4

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

在此输入图像描述

我发现有证据表明 SceneKit 中确实存在这种情况。

如果

applyTorque(SCNVector4Make(x, y, z, w), impulse: boolean)
Run Code Online (Sandbox Code Playgroud)

是正确的用法,那么x是绕 x 轴逆时针旋转的量(参见绿色圆圈箭头),对于y和 也是如此z。同样,这是我最好的猜测,SceneKit 可能使用顺时针旋转。因此,xy、 和z一起确定扭转力的旋转轴。

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

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

您对“沿 y 轴映射矢量”的请求实际上是沿 yz 平面的反射。如果您考虑一下,您想要的是绕 y 轴沿相反方向旋转(negate y),z 轴也是如此。

所以答案应该是:

myNode?.physicsBody?.applyTorque(SCNVector4Make(4, -2, -2.5, 1.6), impulse: true)
Run Code Online (Sandbox Code Playgroud)