有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java平衡了三个参数,因此当其中一个参数发生变化时,数量不会发生变化

我需要平衡这三个变量,这样当给其中一个变量加上一个值时,其他变量会按比例变化,从而使金额保持原始状态。 例如,尘降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

但结果是总和不正确


共 (2) 个答案

  1. # 1 楼答案

    class Param3:
    
        MAX = 300
    
        a = 100
        b = 100
        c = 100
        
        def __init__(self, a, b):
            self.a = a
            self.b = b
            self.c = MAX-a-b
            
        def add_A(val):
            # Limitation
            if a+val > MAX:
                val = MAX-a
                print("A > MAX, must be <=")
            elif a+val < 0:
                val = -a
                print("A < 0, must be >=")
            
            a += val
            var coef = b/(b+c)
            b -= val*coef
            c = MAX - a - b
    
  2. # 2 楼答案

    每增加一个变量,你就想减少另外两个变量。如果每一个变量都减少一半,那么这三个变量的总和保持不变

    伪代码:

    total = 1; //you could change this to anything
    
    x = total/3;
    y = total/3;
    z = total/3;
    
    def increaseX(amount) {
        x = x + amount;
        y = y - amount/2;
        z = z - amount/2;
    }
    
    def increaseY(amount) {
        y = y + amount;
        x = x - amount/2;
        z = z - amount/2;
    }
    
    def increaseZ(amount) {
        z = z + amount;
        x = x - amount/2;
        y = y - amount/2;
    }