Мне нужно сбалансировать три переменные так, чтобы при добавлении значения к одной из них остальные пропорционально менялись, чтобы сумма оставалась оригинальной.
Например, треугольник тела в Fallout 4. https://i.imgur.com/Q2cv9Xm.jpg
Я пытался что-то, но это не правильно и на самом деле не работает.
Сначала я просто добавляю недостающее количество к другим переменным, но пропорциональности нет.
Во-вторых, я пытаюсь сбалансировать пропорции:
public class Triangle()
{
float a = 0.33f;
float b = 0.33f;
float c = 0.33f;
static float sum = 0.99f;
static float maxVal = 0.97f;
void AddA(float value) {
if (a + value <= maxVal) {
a += value;
float ratio1 = b/sum;
float ratio2 = c/sum;
// difference between needed sum and current
float remainderSum = a+b+c-sum;
// the excess part is proportional to b
float rem1 = remainderSum*ratio1;
// the excess part is proportional to c
float rem2 = remainderSum*ratio2;
// subtract excess
b -= rem1;
c -= rem2;
}
}
}
Результат:
Add(0.5f); =>
Sum: 1.1566666666666665
ABC: 0.8300000000000001/0.16333333333333325/0.16333333333333325
но в результате сумма неверна.