System, który buduję, zawiera zestaw suwaków interfejsu użytkownika (liczba jest różna), każdy w skali 0-100. Przez suwak rozumiem interfejs użytkownika, w którym chwytasz element i przeciągasz go w górę iw dół, jak regulator głośności. Są one połączone algorytmem, który zapewnia, że zawsze ich suma wynosi 100. Tak więc, gdy jeden suwak jest przesuwany w górę, pozostałe przesuwają się w dół, ostatecznie do zera. Kiedy jeden jest przesunięty w dół, pozostałe poruszają się w górę. Przez cały czas suma musi wynosić 100. Więc tutaj suwaki mają różne wartości, ale łącznie 100%:
----O------ 40
O---------- 0
--O-------- 20
--O-------- 20
--O-------- 20
Jeśli pierwszy suwak następnie przesunie się W GÓRĘ z 40 do 70, pozostałe muszą przesunąć się W DÓŁ o wartość (w miarę przeciągania suwaka). Zauważ, że trzy suwaki zmieniły się z 20 na 10, a jeden pozostał na zero, ponieważ nie może spaść niżej.
-------O--- 70
O---------- 0
-O--------- 10
-O--------- 10
-O--------- 10
Oczywiście, gdy jakikolwiek suwak osiągnie 0 lub 100, nie może się ruszyć dalej, w tym momencie moja głowa naprawdę zaczyna boleć. Więc jeśli suwak przesuwa się wyżej, pozostałe poruszają się niżej, ale gdy którykolwiek z nich osiągnie zero, tylko pozostałe, które jeszcze nie osiągnęły zera, mogą przesunąć się niżej.
Pytam o to tutaj, ponieważ to pytanie jest specyficzne dla algorytmu, a nie implementacji. FWIW platformą jest Android Java, ale nie jest to szczególnie istotne.
Podejście, które podjąłem przy pierwszym dźgnięciu, polegało na obliczeniu procentowej zmiany przesuniętego suwaka. Następnie podzieliłem tę zmianę i zastosowałem ją (w innym kierunku) do innych wartości suwaka. Problem polega jednak na tym, że przy użyciu wartości procentowych i mnożenia, jeśli jakikolwiek suwak dojdzie do zera, nie można go nigdy zwiększyć od zera - w rezultacie pojedyncze suwaki utkną na zero. Użyłem suwaków z zakresu od 0 do 1 000 000, aby uniknąć problemów z zaokrąglaniem i wydaje się to pomocne, ale jeszcze nie stworzyłem algorytmu, który dobrze radzi sobie ze wszystkimi scenariuszami.