【问题标题】:Mapping a vector across the y-axis if it has 4 components如果向量有 4 个分量,则在 y 轴上映射向量
【发布时间】:2015-12-08 18:17:10
【问题描述】:

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

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

【问题讨论】:

  • 祝您获得 Scene Kit 的关注。全世界使用它的人似乎不到 100 人。他们中的一打可能知道他们在做什么,其中两个曾经使用 SO,但似乎已经离开了。而且我所见过的其他任何地方都没有更多的帮助。我在毫无头绪和(显然)困惑的实验组----一组1。
  • 有几个人四处游荡,用户名和分数低到 4 位数,有时对 SceneKit 问题留下非常突然的答案,似乎是苹果员工正在研究它。但他们的答案只不过是指针而已。他们似乎对自己的产品如此熟悉,以至于无法解释。
  • 我没用过SK。从物理学的角度来看,这听起来很奇怪,因为您试图施加扭矩来改变线性运动,除非您指的是对象的一部分。
  • 扭矩有所帮助,因为当物体撞击另一个物体时,它会根据最初撞击它的方式反弹。
  • 我对你的问题有点困惑。有东西在下落,然后你希望它在落地后侧向推进,对吧?你希望通过坠落物体上的旋转力来实现这一点……我说得对吗?地面是主要的其他物体?

标签: ios scenekit


【解决方案1】:

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

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

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

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

【讨论】:

  • 我也一直在使用试错法。我真的很讨厌这种方法,因为它需要数小时甚至数天的低脑活动才能完成
  • 低脑活动非常适合我。按我的方式发送;)
  • 呵呵,cmon。时间很宝贵。
  • 低脑活动的时间是禅。有时是做一件事的最快方法。只需询问 Photoshop 用户即可。 :D
【解决方案2】:

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

【讨论】:

  • 感谢您的光临。我得到完全不同的物理模拟(不是镜像的)
【解决方案3】:

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

我发现 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)

【讨论】:

  • 我很高兴这有效,但很抱歉打扰你@mareocraft,我很困惑。大小是扭力(或冲量)的大小,x、y、z 位置的数字有点像这个大小的“乘数”吗?这些 x、y、z 值是如何实际工作/发挥作用的?
  • @Confused 希望我对答案的编辑以及this webpage 上的所有内容都能回答您的问题。它表示 x、y 和 z 已归一化,这意味着它们不会影响扭转力,只会影响旋转轴。
  • 对不起,我更糊涂了。如果根据 OP 的问题,他希望(例如)一个球掉到地上,然后以从右到左移动的方式旋转,这需要球绕 Z 轴旋转产生逆时针旋转的力。那岂不是意味着 X、Y、Z 分量就像开关一样,其中 (0,0,-1,10) 在负方向上围绕 Z 轴施加 10 个单位的扭矩力?
  • 取反 x、y 和 z 将使旋转轴指向相反的方向。这相当于取消扭矩。也就是说,它会以相同的力转动,但方向相反。但在 SceneKit 中,旋转轴不能影响扭矩的幅度。很抱歉,但我无法进一步帮助您。您可以参考有关扭矩的物理资源。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多