Алгоритм сглаживания кривой
У меня есть кривая с большим количеством точек, что приводит к замедлению на уровне графического интерфейса. Я хотел бы применить алгоритм, который удаляет смежные точки, которые находятся слишком близко друг от друга (с точки зрения значений, и поэтому могут считаться бесполезными)
Есть ли какой-нибудь известный алгоритм для этого? Я использую C# и ZedGraph
2 ответа
Решение
Вы можете использовать алгоритм Дугласа-Пекера, чтобы уменьшить количество точек и сохранить форму кривой. C# реализацию можно найти здесь
Я не профессионал, но я думал, что вы можете сделать это без какого-либо известного алгоритма. Вот что я подумал (просто принцип, так как я не знаю, в каком классе вы хранили свои очки):
Collection<float> ListOfValues = new Collection<float>();
float minimalValueDistance = 0.5f;
var listWithoutAdjacentPoints = ListOfValues.Where(x =>
{
int indexOfValue = ListOfValues.IndexOf(x);
// only considering the distance from the left
if (indexOfValue > 0 && Math.Abs(x - ListOfValues[indexOfValue - 1]) > minimalValueDistance)
return true;
else
return false;
});