J'écris un force-directed graph tridimensionnel dans SceneKit où je modélise des noeuds comme des sphères physiques avec des charges et des masses fixes.Comment combiner des champs de physique dans SceneKit?
Ces sphères doivent exercer les champs gravitationnels et électriques radiaux afin d'obtenir la dynamique nécessaire:
En général, les forces d'attraction printanières basé sur la loi de Hooke sont utilisés pour attirer les paires de points d'extrémité des bords du graphique l'un vers l'autre, tout en simultanément des forces répulsives comme celles des particules chargées électriquement basées sur la loi de Coulomb sont utilisées pour séparer tous les paires de nœuds.
Le problème se pose lorsque l'on remarque que SCNNode
offres, mais une seule propriété physicsField
.
Actuellement, je ne vois aucun moyen d'accomplir cela sans avoir deux nœuds physiques séparés occupant le même espace (beurk et impossible?). J'ai essayé d'insérer des corps d'enfant avec des corps physiques statiques/dynamiques afin d'accommoder plusieurs champs, mais cette approche ne semble pas fonctionner du tout (c'est-à-dire que rien ne se passe).
Sur une note un peu connexe - le moteur de SceneKit physique se sent assez incomplète pour moi, étant donné que le dessin graphique-force dirigée 3D tombe sous utilisation typée de ces cadres. Par exemple, SceneKit ne dispose pas d'une version 3D de SKPhysicsJointSpring
, ce qui rend extrêmement pénible l'implémentation de la physique d'attraction de périphérie de nœud à nœud. Bien qu'il fonctionnalité SCNPhysicsBehavior
, il n'existe pratiquement aucune documentation sur la sous-classe pour créer des comportements personnalisés.
Pire encore, l'interface publique offre aucune méthode pour passer outre, ce qui en fait inverse ingénierie risqué et dangereux pour l'utilisation App Store:
open class SCNPhysicsBehavior : NSObject, NSSecureCoding {
}
L'utilisation pure de champs électriques ne fonctionnerait certainement pas. –
Ce ne serait pas la même chose que d'utiliser les lois de Hooke et Coulumb, mais il semble que cela pourrait servir de base à une visualisation graphique. Pouvez-vous expliquer pourquoi vous dites que cela ne fonctionnerait pas? – roop