Есть в C# Методы заложенные стандартно но они показывают не корректно
public static IList<double> AngleU(IList<double> maxZa, IList<double> minZa)
{
var count = Math.Max(maxZa.Count, minZa.Count);
double[] numArray = new double[count];
for (var i = 1; i < count; i++)
{
Vector vec1 = new Vector(minZa[i], maxZa[i]);
Vector vec2 = new Vector(minZa[i], minZa[i]);
var angleUp = (Vector.AngleBetween(vec1, vec2) * 100)*-1;
numArray[i] = Math.Round(angleUp, 2);
}
return (IList<double>)numArray;
}

public static IList<double> AngleD(IList<double> maxZa, IList<double> minZa)
{
var count = Math.Max(maxZa.Count, minZa.Count);
double[] numArray = new double[count];
for (var i = 1; i < count; i++)
{
Vector vec1 = new Vector(maxZa[i], minZa[i]);
Vector vec2 = new Vector(maxZa[i], maxZa[i]);
var angleUp = Vector.AngleBetween(vec1, vec2) * 100;
numArray[i] = Math.Round(angleUp, 2);
}
return (IList<double>)numArray;
}