Question

Je modélisation d'une simulation physique sur la base de force où plusieurs particules sont en interaction les uns avec les autres. Les particules peuvent se déplacer de telle sorte qu'une fenêtre statique peut facilement perdre la trace d'entre eux (imaginez tout le groupe de particules se déplaçant hors de l'écran vers la droite et la fenêtre affichant un fond blanc).

Ma solution actuelle est de suivre simplement le « centre » des particules en trouvant le min / max des x et y et de faire suivre du milieu de la fenêtre qui. Il fonctionne très bien (pas besoin de trouver le véritable centre de masse). Voici un visuel:

viewport

Mon problème est que je tente d'ajouter la possibilité de faire glisser manuellement des particules avec la souris. Je ne l'ai pas trouvé une façon élégante de le faire. Le problème est la traduction entre les coordonnées et les coordonnées de viewport de simulation est en constante évolution, car la fenêtre suit le centre des particules.

Lorsque la souris je sur une particule, je veux qu'il y ait un emplacement fixe dans la simulation (il ne tient pas compte de toutes les forces là-dessus). Lorsque je déplace la souris avec le bouton enfoncé, je veux la particule de se déplacer dans la simulation. Je l'ai atteint cet objectif. Cependant, elle produit des effets secondaires désagréables en raison de la fenêtre et les autres particules qui sont encore en mouvement. La particule ne se déplace pas dans la simulation lorsque la souris est enfoncé et stationnaire, mais il se déplace sur l'écran parce que le centre de tous les changements de particules et la fenêtre ajuste en conséquence. Le curseur est fixe de sorte que la particule « se déplace » de sous elle. Lorsque la souris est déplacée toujours très légèrement, la particule téléporte sous le curseur, car nouvelle position représente les coordonnées de simulation radicalement différentes du curseur.

Toutes les suggestions pour une belle expérience utilisateur cohérente sans les effets secondaires ci-dessus?


Je l'ai déjà pensé:

  • Mise en pause de la simulation alors que la souris est en panne
  • change viewport Suspendre alors que la souris est vers le bas
  • Déplacement du curseur de la souris que les changements de viewport (vraiment mauvais)

Mais ils ont tous d'autres mauvais effets secondaires ou à emporter valeur de la simulation.

En outre, je pense que cette question est la langue et la plate-forme agnostique donc n'attache pas la signification littérale et spécifique à la mise en œuvre de « viewport », « coordonnées fenêtre » ou « coordonnées de simulation ». Traitez-les comme concepts graphiques génériques.

Était-ce utile?

La solution

Modification de l'algorithme qui ajuste la fenêtre à utiliser la position du curseur en tant que l'origine de la transformation. De cette façon, la fenêtre et la simulation des coordonnées au niveau du curseur resterait fixe. Vous pouvez tout simplement faire lorsque la souris est pressé, mais il peut aussi avoir des résultats satisfaisants si elle était faite à tout moment.

Il complique les mathématiques un peu, mais il ne semble pas que vous êtes de gauche avec trop d'options.

Autres conseils

Je ne pense pas qu'il y ait un besoin de faire une pause de la simulation. Comme vous le décrivez, il semble que l'entrée de votre souris (entrée de vue) modifie directement les données du modèle et la vue est mis à jour en conséquence lorsque la prochaine mise à jour / rinçage / tout ce qui est publié.

Peut-être que vous pouvez insérer une nouvelle particule qui est utilisé au cours de « animation », et ce n'est pas couplé à l'un des autres particules. Tout en introduisant cette particule, vous pouvez cacher la particule réelle (et il est bords). Ainsi, tout en déplaçant la souris, vous mettez à jour uniquement les données de cette particule animée. Lorsque les extrémités d'animation (vous laissez aller de la souris), l'objet d'animation est supprimé, la particule réelle est mis à jour ses données et affiche à nouveau.

D'une certaine façon c'est une forme de pause, puisque vous trichez le système de mise à jour. Les données du système de particules ne sont pas mis à jour au cours de l'animation, il semble tout comme vous déplacez la particule du système réel, lorsque vous êtes en fait simplement tricher l'utilisateur graphiquement. Espérons que cela fait un certain sens, 2 heures ici:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top