得到了这样的函数,如果曲线太接近直线(它的直线),就从曲线上删除一些点.但关键是坐标的大小.一条曲线可以有1000个左右的坐标,它使程序的运行速度慢了3-4倍.
如果不判断所有直线,则需要开始索引和结束索引(坐标大小约3000)
(List<int>, List<int>) LineCheck(List<int> Xcurve, List<int> Ycurve, List<int> XLine, List<int> YLine, double deviation)
{
//point - координаты точки для проверки, LineUp - список координат верхней прямой
//LineDown - список координат нижней прямой
List<int> returnCurveX = new List<int>();
List<int> returnCurveY = new List<int>();
//отклонение от прямой, для большей точности проверки можно уменьшить
//но надо проверять по факту
for (int i = 0; i < Xcurve.Count - 1; i++)
{
bool flag = true;
int XStartIndex = XLine.Where(w => w >= Xcurve[0]).First();
int XEndIndex = XLine.Where(w => w <= Xcurve[Xcurve.Count - 1]).Last();
for (int j = XStartIndex; j < XEndIndex; j++)
{
double[] vector1 = { Xcurve[i] - XLine[j], Ycurve[i] - YLine[j] };
// Вычисление длин векторов
double length1 = Math.Sqrt(vector1[0] * vector1[0] + vector1[1] * vector1[1]);
if (length1 < deviation)
{
flag = false;
}
}
if (flag)
{
returnCurveX.Add(Xcurve[i]);
returnCurveY.Add(Ycurve[i]);
//принадлежит прямой
}
}
// return (Xcurve, Ycurve);
//точка не попала на координаты прямой
return (returnCurveX, returnCurveY);
}
我试图以某种方式打破第一个循环,但它不允许我返回所需的分数.如果我们能改变震源数组,也许会更容易些.