private void addUniformForceDeflection(LineElement line, float lineLength, DistributedSpanLoad load, float a, float b, float c, float[,] controlPoints, float dirComponent, float scale, float EI)
{
float W, w;
float RA;
float c1, c3, c5, c6;
float x = 0.0f, deflection = 0.0f, angle = 0.0f;
w = -1f * Math.Sign(load.La) * Math.Min(Math.Abs(load.La), Math.Abs(load.Lb));
W = w * b;
RA = W * (1.0f - (2.0f * a + b) / (2.0f * lineLength));
// Calculo de las constantes
c6 = w * (float)Math.Pow(b, 3) * (b + 2.0f * a) / 48.0f;
c5 = (w * b * (float)Math.Pow(lineLength - a - b / 2.0f, 3) / (6.0f * lineLength)) - RA * (float)Math.Pow(lineLength, 2) / 6.0f - c6 / lineLength;
c1 = c3 = w * (float)Math.Pow(b, 3) / 24.0f + c5;
// Flechas, angulos
for (int i = 0; i < controlPoints.GetLength(0); i++)
{
x = controlPoints[i, 0] * lineLength;
deflection = addUniformForceDeflection(load, x, lineLength, ref angle, a, b, c, W, w, RA, c1, c3, c5, c6) * scale / EI;
controlPoints[i, 1] += (deflection * dirComponent);
controlPoints[i, 2] += angle * dirComponent / EI;
}
}