private static double[] winkel(List<Complex> z)
{
int n = z.Count;
double max = -double.MaxValue;
double[] his = new double[n];
for (int j = 1; j < n - 1; j++)
{
Complex c = z[j - 1] - z[j + 1];
double lm = c.Magnitude;
c = z[j] - z[j + 1];
double lr = c.Magnitude;
c = z[j - 1] - z[j];
double ll = c.Magnitude;
double alpha = Math.Acos((lr * lr + ll * ll - lm * lm) / (2 * lr * ll));
// turning angle (0-180)
double a = 180 - alpha * 180 / Math.PI;
// the original relevance measure
his[j] = a * lr * ll / (lr + ll);
if (his[j] > max)
max = his[j];
}
his[0] = max;
his[n - 1] = max;
return his;
}