Canguro.Analysis.LineStressCalculator.addToShearDiagram C# (CSharp) Метод

addToShearDiagram() приватный Метод

private addToShearDiagram ( LineLoad load, float dirComponent, float position, float lineLength ) : float
load LineLoad
dirComponent float
position float
lineLength float
Результат float
        private float addToShearDiagram(LineLoad load, float dirComponent, float position, float lineLength)
        {
            if (load is ConcentratedSpanLoad)
            {
                float P = ((ConcentratedSpanLoad)load).L;
                float pDist = ((ConcentratedSpanLoad)load).D;

                if (position < (pDist * lineLength))
                    return (P * dirComponent) / lineLength * position;
                else
                    return -(P * dirComponent) / lineLength * (lineLength - position);
            }
            else if (load is DistributedSpanLoad)
            {
                DistributedSpanLoad dLoad = load as DistributedSpanLoad;

                //return 0f;

                float a, b, c, Ra, W, xt;
                a = dLoad.Da * lineLength;
                b = dLoad.Db * lineLength - a;
                c = lineLength - a - b;

                if (b == 0)
                    return 0f;
                else if (position >= a && position <= (a + b))
                {
                    W = (dLoad.La + dLoad.Lb) * b / 2f;
                    xt = Math.Abs(dLoad.La + dLoad.Lb) > float.Epsilon ? b * (dLoad.La + 2f * dLoad.Lb) / (3 * (dLoad.La + dLoad.Lb)) : 0.0f;
                    Ra = W / lineLength * (lineLength - (a + xt));

                    /////////////////////////////////////////
                    // Shear in a
                    float shear_a = Ra;
                    /////////////////////////////////////////

                    /////////////////////////////////////////
                    // Shear in a + b
                    float Wx_b, shear_b;
                    Wx_b = (dLoad.La + dLoad.La + dLoad.Lb - dLoad.La) * b / 2f;
                    shear_b = Ra - Wx_b;
                    /////////////////////////////////////////

                    /////////////////////////////////////////
                    // Line between a --- b
                    float originalLine = (position - a) / b * ((shear_b - shear_a)) + shear_a;
                    /////////////////////////////////////////

                    float Wx, y, xt2, y1;
                    y1 = (dLoad.Lb - dLoad.La) * (position - a) / b;
                    y = dLoad.La + y1;
                    xt2 = Math.Abs(dLoad.La + y) > float.Epsilon ? (position - a) / 3f * (dLoad.La + 2 * y) / (dLoad.La + y) : 0.0f;
                    Wx = (dLoad.La + y) * (position - a) / 2f;

                    return (Ra - Wx - originalLine) * dirComponent;
                    //return dirComponent * dLoad.La * (position - a) + dLoad.La * (dLoad.Db - dLoad.Da) * position;
                }
            }

            return 0f;
        }