2009-05-14 5 views
1

J'ai un curseur avec x nombre de barres représentant chacune une plage de valeurs. Chaque barre a une poignée supérieure et inférieure qui est utilisée pour manipuler la gamme. Les barres peuvent être interconnectées, ainsi, certaines des poignées affecteront deux barres (c'est-à-dire que la poignée est au milieu des deux barres), dont leurs mouvements peuvent affecter les mouvements des autres barres le long de la chaîne. Les barres peuvent avoir une largeur maximale, et elles peuvent toujours être poussées/tirées tout en conservant leur largeur maximale. Ma question est, existe-t-il un algorithme documenté pour valider un mouvement où l'utilisateur essaye de déplacer une poignée à la valeur V, qui, à son tour, poussera ou tirera toutes les barres connectées en bas de la chaîne?Algorithme Slider Bar/Pins

C'est un peu difficile à expliquer, alors j'espère que cela a du sens. Je ne cherche pas une solution réelle, seulement quelques algorithmes qui pourraient m'aider à trouver une solution (par exemple, les termes de recherche google magiques pour ce type de problème). Merci de votre aide.

+0

Pouvez-vous rapidement MSPaint une image? :) Je ne suis pas sûr si je comprends votre description. –

Répondre

0

On dirait que vous avez affaire à un cas particulier de programmation par contraintes. Je pense que vous pouvez modéliser vos curseurs comme une série de contraintes, à savoir:

gamme Slider1: (a, b) où a> = MIN, b < = MAX
Plage de slider2: (c, d) où c> a + x, d
...

où x est modifié lorsque l'utilisateur déplace la plage inférieure du curseur 2?

Il faudrait un temps linéaire dans le nombre de contraintes pour évaluer simplement toutes les équations affectées lorsque l'utilisateur déplace un curseur, ce qui n'est pas trop grave. Je ne suis pas sûr que tu puisses faire mieux que ça.

+0

Merci Gabe. Je n'ai pas pensé à l'approcher de cette façon (c'est-à-dire en définissant explicitement des contraintes sur chaque poignée, par opposition à valider les mouvements comme ils viennent). Cela peut m'aider à repenser mon approche. –

+0

Est-ce que je reçois un vote? :-) –