【发布时间】:2018-08-25 01:26:03
【问题描述】:
我画了一些这样的图表:
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 通过设计将这些部分绘制在给定点之外?可以预防吗?
【问题讨论】: