用两个符号

时间:2015-11-03 16:25:57

标签: c# algorithm

我正在努力制定一个很好的算法来总结一对力量。这里的主要问题是你可以使用替代标志强制,这意味着强制可以随时使用+或 - 。

例如: F1 =±100kN,F2 = 200kN - > maxForce = + 100 + 200 = 300 kN,minForce = -100 + 200 = 100 kN。

我已经制作了一个简单的算法,它结合了所有可能性,但我要求的东西比那更好。作为我的方法的输出,我有:

public List<Force> SumForces(Force firstForce, Force secondForce)
    {
        Force maxForce = new Force();
        Force minForce = new Force();

        // All possible sumatuons
        double sumCaseFirst = firstForce.ForceValue + secondForce.ForceValue;
        double sumCaseSecond = firstForce.ForceValue - secondForce.ForceValue;
        double sumCaseThird = -firstForce.ForceValue + secondForce.ForceValue;
        double sumCaseFourth = -firstForce.ForceValue - secondForce.ForceValue;

        // Calculating all posible sumations
        if (firstForce.Sign == ForceSign.Alter && secondForce.Sign == ForceSign.Alter)
        {
            maxForce.ForceValue = sumCaseFirst;
            minForce.ForceValue = sumCaseFourth;
        }
        else if (firstForce.Sign == ForceSign.Alter && secondForce.Sign == ForceSign.Plus)
        {
            maxForce.ForceValue = sumCaseFirst;
            minForce.ForceValue = sumCaseThird;
        }
        else if (firstForce.Sign == ForceSign.Alter && secondForce.Sign == ForceSign.Minus)
        {
            maxForce.ForceValue = sumCaseSecond;
            minForce.ForceValue = sumCaseFourth;
        }
        else if (firstForce.Sign == ForceSign.Plus && secondForce.Sign == ForceSign.Alter)
        {
            maxForce.ForceValue = sumCaseFirst;
            minForce.ForceValue = sumCaseSecond;
        }
        else if (firstForce.Sign == ForceSign.Plus && secondForce.Sign == ForceSign.Plus)
        {
            maxForce.ForceValue = sumCaseFirst;
            minForce.ForceValue = 0;
        }
        else if (firstForce.Sign == ForceSign.Plus && secondForce.Sign == ForceSign.Minus)
        {
            maxForce.ForceValue = sumCaseSecond;
            minForce.ForceValue = 0;
        }
        else if (firstForce.Sign == ForceSign.Minus && secondForce.Sign == ForceSign.Alter)
        {
            maxForce.ForceValue = sumCaseThird;
            minForce.ForceValue = sumCaseFourth;
        }
        else if (firstForce.Sign == ForceSign.Minus && secondForce.Sign == ForceSign.Plus)
        {
            maxForce.ForceValue = sumCaseThird;
            minForce.ForceValue = 0;
        }
        else
        {
            maxForce.ForceValue = 0;
            minForce.ForceValue = sumCaseFourth;
        }

        // Ensure that true maximum force value is at index 0
        if (maxForce.ForceValue > minForce.ForceValue)
        {
            Sum.Add(maxForce);
            Sum.Add(minForce);
        }
        else
        {
            Sum.Add(minForce);
            Sum.Add(maxForce);
        }


        return Sum;
    }

1 个答案:

答案 0 :(得分:0)

添加正值时总是最大值

double maxValue = Math.Abs(firstForce.ForceValue) + Math.Abs(secondForce.ForceValue);

添加负值

时始终为最小值
double minValue = -Math.Abs(firstForce.ForceValue) - Math.Abs(secondForce.ForceValue);

没有必要考虑正面和负面的组合。