Оксиплот Найти 'Значение оси Y' из 'Значение оси X' C # - PullRequest
0 голосов
/ 06 января 2019

Я рисую свой график с помощью Oxyplot, и у меня нет проблем с рисованием графика. Моя ось Y - это «Линейная ось», а ось X - «TimeSpanAxis».

Что я хочу сделать, это получить значение Y из заданного значения X.

Например, я хочу получить значение Y из TimeSpan(0,0,0,1).

Я не могу использовать положение мыши или любые другие события. Значение X будет задано пользователем как интервал времени.

Это должно быть легко, но я ничего не смог найти.

1 Ответ

0 голосов
/ 07 января 2019

Я не совсем уверен, что это самый эффективный способ сделать это, но вот одно предложение о том, как найти значение Y из X. Обратите внимание, что это не 100% проверенный код, но вы получите суть Идея из этого.

Идея состоит в том, чтобы рассчитать наклон на основе «определенной точки» до и после точки поиска. Затем вы можете использовать наклон, чтобы найти недостающий кординат рассматриваемой точки.

Slope = (y2-y2)/(x2-x1)

Если у вас одна ось как LinearAxis, а другая как TimeSpanAxis, и вы даете TimeSpanAxis, для которого вам нужно найти Y.

var timeSpanToSearch = new TimeSpan(8, 30, 0);
var timeSpanToSearchAsDouble = TimeSpanAxis.ToDouble(timeSpanToSearch);
var series = MyModel.Series.First() as LineSeries;
double result = 0;

// If the point is a defined point, you can find Y easily
if (series.Points.Any(x => x.X.Equals(timeSpanToSearchAsDouble)))
{
    result = series.Points.First(x => x.X.Equals(timeSpanToSearchAsDouble)).Y;
}
else
{
    var floorValue = series.Points.Where(x => x.X < timeSpanToSearchAsDouble).Last();       
    var ceilingValue = series.Points.Where(x => x.X > timeSpanToSearchAsDouble).First();

    var slope = (ceilingValue.Y - floorValue.Y) / (ceilingValue.X - floorValue.X);
    result = slope * (timeSpanToSearchAsDouble - floorValue.X) + floorValue.Y;
}            
...