C# 用两个符号求两个力的和

C# 用两个符号求两个力的和,c#,algorithm,C#,Algorithm,我正在尝试做一个很好的算法来求这对力的和。这里的主要问题是,你可以用替代符号表示力,这意味着力可以在任何时候用+或-表示 例如: F1=±100千牛,F2=200千牛-->最大力=+100+200=300千牛,最小力=-100+200=100千牛 我已经做了一个简单的算法,它结合了所有的可能性,但我要求的东西比这更好。作为我的方法的输出,我有: public List<Force> SumForces(Force firstForce, Force secondForce)

我正在尝试做一个很好的算法来求这对力的和。这里的主要问题是,你可以用替代符号表示力,这意味着力可以在任何时候用+或-表示

例如: F1=±100千牛,F2=200千牛-->最大力=+100+200=300千牛,最小力=-100+200=100千牛

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

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;
    }
public List SumForces(强制第一部队、强制第二部队)
{
力maxForce=新力();
力最小力=新力();
//所有可能的苏马托人
双sumCaseFirst=firstForce.ForceValue+secondForce.ForceValue;
double sumCaseSecond=firstForce.ForceValue-secondForce.ForceValue;
双sumCaseThird=-firstForce.ForceValue+secondForce.ForceValue;
双sumCaseFourth=-firstForce.ForceValue-secondForce.ForceValue;
//计算所有可能的总和
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=sumcasethright;
}
else if(firstForce.Sign==ForceSign.Alter&&secondForce.Sign==ForceSign.减号)
{
maxForce.ForceValue=sumCaseSecond;
minForce.ForceValue=sumCaseFourth;
}
else if(firstForce.Sign==ForceSign.Plus&&secondForce.Sign==ForceSign.Alter)
{
maxForce.ForceValue=sumCaseFirst;
minForce.ForceValue=sumcasessecond;
}
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.减号)
{
maxForce.ForceValue=sumCaseSecond;
minForce.ForceValue=0;
}
else if(firstForce.Sign==ForceSign.减号和&secondForce.Sign==ForceSign.Alter)
{
maxForce.ForceValue=sumCaseThird;
minForce.ForceValue=sumCaseFourth;
}
else if(firstForce.Sign==ForceSign.减号和&secondForce.Sign==ForceSign.Plus)
{
maxForce.ForceValue=sumCaseThird;
minForce.ForceValue=0;
}
其他的
{
maxForce.ForceValue=0;
minForce.ForceValue=sumCaseFourth;
}
//确保真正的最大力值位于索引0处
如果(maxForce.ForceValue>minForce.ForceValue)
{
相加(最大力);
加上(minForce);
}
其他的
{
加上(minForce);
相加(最大力);
}
回报金额;
}

最大值总是在添加正值时出现

double maxValue = Math.Abs(firstForce.ForceValue) + Math.Abs(secondForce.ForceValue);
double minValue = -Math.Abs(firstForce.ForceValue) - Math.Abs(secondForce.ForceValue);
最小值总是在添加负值时出现

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

不需要考虑正面和负面的组合。

你只有2种力量?你的算法是什么?@Backs在这句话中你不明白的:
一个结合了所有可能性的简单算法
?它很简单-在if-else if-else块中有3个符号和2个力的所有可能组合。@fjardon问题是我们不知道如何表示数据来显示负和正力量。回答时应该使用什么数据结构。您是否尝试创建一个包含可能符号的键和包含这些符号的sumCase值的地图?这样,您就不需要所有的if-else语句,只需获取案例中的值。变量名称中有两次maxValue是,但是,例如,如果两者都是正的,或者都是负的,该怎么办?然后,最大值是它们的总和,没有最小值(它是0)。在这种情况下,最小值等于最大值。也许你需要更清楚部队的形式要求。我认为每个力都可以是正的或负的。