Я рисую какую-то диаграмму вот так:
var geometry = new StreamGeometry();
using (var ctx = geometry.Open())
{
ctx.BeginFigure(new Point(offset, MyCanvas.Height), false, false);
for (var i = 0; i < interpolated.Count; i++)
{
var x = i * partWidth / interpolated.Count + offset;
ctx.LineTo(new Point(x, MyCanvas.Height - interpolated[i]), true, false);
}
ctx.LineTo(new Point(offset + partWidth, MyCanvas.Height), true, false);
ctx.LineTo(new Point(offset, MyCanvas.Height), true, false);
geometry.FillRule = FillRule.EvenOdd;
geometry.Freeze();
var path = new Path
{
Stroke = Brushes.Black,
StrokeThickness = 1,
Data = geometry,
Fill = Brushes.Black
};
MyCanvas.Children.Add(path);
}
Все мои значения в interpolated[]
= 0..40.
Высота моего холста = 50
Вот что я получаю:

Я не понимаю, почему некоторые точки находятся ниже линии, которую я рисую так:
var zeroLine = new Line
{
X1 = 0,
X2 = 790,
Y1 = MyCanvas.Height,
Y2 = MyCanvas.Height,
Stroke = Brushes.Coral,
StrokeThickness = 1
};
MyCanvas.Children.Add(zeroLine);
Если значение MyCanvas.Height больше значений моих данных (это точно), то MyCanvas.Height - interpolated[i]
, поскольку Y
всегда должно быть меньше оранжевой линии, верно?
Как я понимаю, StreamGeometry рисует эти части за пределами заданных точек по проекту? Можно ли это предотвратить?