我正在 SceneKit 中编写一个三维力导向图,其中我将节点建模为具有固定电荷和质量的物理球体。
这些球体必须施加径向引力场和电场,以实现所需的动力学:
通常,基于胡克定律的弹簧状吸引力用于将图边缘的成对端点相互吸引,同时基于库仑定律的带电粒子的排斥力用于分离所有节点对。
当人们注意到SCNNode
提供的只是一个physicsField
属性时,就会出现问题。
目前,如果没有两个单独的物理节点占用相同的空间,我认为没有办法实现这一点(恶心和不可能?)。我尝试使用静态/动态物理实体插入子实体以适应多个字段,但是这种方法似乎根本不起作用(即没有任何反应)。
在一个有点相关的注释上——SceneKit 的物理引擎对我来说感觉相当不完整,因为 3D 力导向图形绘制属于此类框架的典型用法。
例如,SceneKit 没有 3D 版本SKPhysicsJointSpring
,这使得实现节点到节点的边缘吸引物理非常繁琐。虽然它确实具有功能SCNPhysicsBehavior
,但几乎没有关于对其进行子类化以创建自定义行为的文档。
更糟糕的是,公共接口没有提供覆盖的方法,这使得逆向工程对于 App Store 的使用来说是有风险和不安全的:
open class SCNPhysicsBehavior : NSObject, NSSecureCoding {
}