Система, которую я создаю, включает в себя набор ползунков пользовательского интерфейса (число варьируется), каждый со шкалой от 0 до 100. Под слайдером я подразумеваю пользовательский интерфейс, в котором вы берете элемент и перетаскиваете его вверх и вниз, как регулятор громкости. Они связаны алгоритмом, который гарантирует, что они всегда составляют 100. Таким образом, когда один ползунок перемещается вверх, все остальные перемещаются вниз, в конечном итоге к нулю. Когда один движется вниз, другие движутся вверх. В любом случае общее количество должно быть 100. Таким образом, здесь ползунки имеют различные значения, но они составляют 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Если первый ползунок затем перемещается вверх с 40 до 70, остальные должны сдвинуть значение ВНИЗ (так как ползунок перетаскивается). Обратите внимание, что три ползунка изменились с 20 на 10, и один остался на нуле, поскольку он не может опуститься ниже.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Конечно, когда какой-либо ползунок достигает 0 или 100, он не может двигаться дальше, и моя голова действительно начинает болеть. Таким образом, если ползунок перемещается выше, другие перемещаются ниже, но когда любой из них достигает нуля, только остальные, которые еще не достигли нуля, могут двигаться ниже.
Я спрашиваю это здесь, так как этот вопрос относится к алгоритму, а не реализации. FWIW платформа Android Android, но это не особенно актуально.
Подход, который я применил к своему первому удару, состоял в том, чтобы рассчитать процентное изменение перемещения ползунка. Затем я разделил это изменение и применил его (в другом направлении) к другим значениям ползунка. Проблема, однако, в том, что при использовании процентов и умножения, если какой-либо ползунок достигает нуля, он никогда не может быть снова увеличен с нуля - чистый результат этого заключается в том, что отдельные ползунки застряли в нуле. Я использовал ползунки с диапазоном от 0 до 1 000 000, чтобы избежать проблем с округлением, и это, кажется, полезно, но мне еще предстоит создать алгоритм, который бы хорошо справлялся со всеми сценариями.