Supposons que j'ai une primitive physique que je vais appeler un «fil», enroulé autour d'un environnement 2D (comme décrit dans cette question ).
Voici une illustration de ce à quoi cela pourrait ressembler:
Dans l'exemple d'illustration: La boîte est tirée vers le haut (maintenue) par le fil, et la boîte tire le fil vers le bas. L'objet sur le ressort est poussé vers le bas par le fil, mais pousse également le fil vers le haut.
Bien que je n'aie pas encore compris comment l'implémenter, supposons que le fil glisse librement sur les points autour desquels il est enroulé.
Dans une simulation physique 2D (c.-à-d. Basée sur une image), comment calculez-vous les forces (ou impulsions) à appliquer aux objets qui sont attachés à ou enroulés par un fil comme celui-ci?
Comme je l'ai mentionné dans ma première question , j'imagine que si le seul objet non statique "sur" le fil était la masse à la fin, alors la force serait identique à un joint de longueur fixe entre la masse et le point avant que sur le fil.
la source
F = T * cos(angle between wire and spring axis)
. Quel angle exactement? Aussi: Je ne pense pas que (dans la simulation) il existe un moyen sensé de faire "savoir" au fil qu'il y a un ressort attaché à cet objet.J'apprécie vraiment votre frustration dans ces fils à base de fil, c'est un problème difficile à résoudre. Nous n'avons jamais réussi à faire fonctionner les collisions de façon parfaite, mais la simulation de contraintes est définitivement réalisable et simple.
Une contrainte de fil est en fait presque identique à une contrainte de distance régulière. Au lieu de deux points de contrainte, vous avez n + 1 pour un fil à n segments, un pour chaque sommet - aux extrémités, le jacobien est identique à une contrainte de distance (c'est-à-dire quelque chose comme d / | d | où d est le vecteur entre les points), et pour les nœuds internes, le jacobien est quelque chose comme (a / | a | - b / | b |) où a et b sont les vecteurs du nœud aux nœuds adjacents. (Désolé, ça fait quelques années que j'ai touché à ça ...)
Vous ne pouvez pas le simuler à la "seul le dernier segment est dynamique" car, comme dans votre exemple, les objets peuvent interagir avec d'autres segments, mais vous avez seulement besoin de simuler des masses aux extrémités de la corde - en interne, la corde peut être sans masse. Les impulsions de contrainte calculées à chaque nœud doivent être appliquées à l'objet qui entre en collision avec ce nœud.
Voici quelques articles connexes:
Les trois premiers sont relativement récents et devraient beaucoup aider. La page 75 du document du bas décrit une contrainte "multibars" qui est essentiellement un fil.
Bonne chance :)
raigan
la source
L'idée de base est que la longueur de la corde reste la même. S'il est poussé vers le haut, vous devrez y créer un "point de partage". Ensuite, la corde détermine de quel côté elle est attachée, car elle ne peut pas "pousser" dans cette direction. Parce qu'il est attaché à quelque chose à droite, le morceau de corde à gauche deviendra plus court et la pièce entre le point de partage et le point attaché deviendra légèrement plus longue. Puis, comme l'a dit Niall, calculez la tension du fil. Comment je ferais cela est de calculer la tension de chaque "morceau" de corde. Vous pouvez ensuite l'utiliser pour déterminer les forces impliquées.
J'espère que cela t'aides.
la source