#c# #winforms #charts
Вопрос:
У меня есть список серий и вертикальная аннотация. Я хочу иметь значение Y сигналов для каждой позиции X вертикальной аннотации (VA).
Вот что я сделал до сих пор.
VerticalAnnotation VA;
List<double> Points = new List<double>();
foreach (var sig in Signals)
{
for (int g = 0; g < sig.Points.Count; g )
{
Points.Add(sig.Points[g].XValue);
}
Points.Sort();
}
и
private void chart1_AnnotationPositionChanging(object sender, AnnotationPositionChangingEventArgs e)
{
var x = Points.BinarySearch(VA.X);
}
Но по какой-то причине переменная x получает отрицательные значения, что не имеет смысла.
Ответ №1:
В документах говорится следующее:
ВОЗВРАТ… индекс элемента на основе нуля в отсортированном списке, если элемент найден; в противном случае отрицательное число, являющееся побитовым дополнением индекса следующего элемента, который больше элемента, или, если нет элемента большего размера, побитовым дополнением Count
Обратите внимание, что последнее значение также отрицательное.
Отрицательный результат означает, что того, что вы ищете, нет в списке. Также результат можно использовать (инвертировав его как ~result
), чтобы узнать, где было бы найдено значение, если бы оно было в списке, или где вам нужно было бы вставить его, чтобы список был хорошо отсортирован.
Комментарии:
1. таким образом, проблема в том, что вертикальная аннотация относится к областям между точками данных, и этих значений нет в списке. Я думаю, мне нужно найти способ для вертикальной аннотации либо перемещаться только по точкам данных, либо получать значение ближайшей точки данных.