C# MS Charts получават Y стойност от общ X

Имам диаграма с 3 линии, всички те са динамика (сериите от точки варират по всяко време). За две линии имам няколко точки, до 20, а за другата, която е сплайн, до 500. (винаги в същия диапазон x)

Трябва да проверя дали Spline е между другите две линии. С други думи, за всяка точка от Spline вземете Y стойността на всички линии и проверете дали е в диапазона.

Как бих могъл да го постигна?

Вече опитах следния код, но когато извикам X точка, която не е дефинирана в другите две линии, ще имам само Y стойността за Spline:

   var a = chart1.Series.Select(series => series.Points.Where(point => point.XValue == 7).ToList()).ToList();

Следвайте изображение на графиката:

Синята и жълтата линия са по-малко дефинираните и трябва да проверя дали червената остава между тях


person Omar Tomasi    schedule 12.01.2017    source източник


Отговори (1)


Това е по-скоро математически проблем, отколкото проблем с диаграма. За да се определи, че средната линия е между горната и долната граница, се свежда до линейна интерполация на границите.

Да предположим, че вашата горна граница (ub) е определена на пет точки: 1,2,5,6,9. Лесният начин да направите линейната интерполация е да намерите двата най-близки съседа и да направите среднопретеглената стойност. напр. ub(5,5) = ub(5)/2 + ub(6)/2

Има много начини да направите 1D линейна интерполация и ако го търсите в stackoverflow, трябва да можете да намерите съществуващи решения.

person uqji    schedule 13.01.2017
comment
Така че няма начин C# да ви даде Y стойността на която и да е точка от графиката, дори ако графиката е проектирана и той трябва да знае така или иначе? Това е ужасно за мен. Между другото мога също да изчисля всяко липсващо Y за другите два реда. И след това направете сравнението. - person Omar Tomasi; 13.01.2017
comment
Не, това не е възможно. От една страна y-стойностите в никакъв случай не са уникални: линия или сплайн могат лесно да се сгънат назад. Трябва да изчислите това сами. За линиите това е тривиално. Един от начините за сплайнове може да бъде да ги пресъздадете в graphicspath и след това да ги изобразите на линии с помощта на Flatten.. - person TaW; 16.01.2017