图表:带状线和曲线交点

时间:2016-06-13 09:36:22

标签: c# winforms charts

我在正弦曲线图中添加了一条水平条带线,它没有很多数据点。有没有办法找到x坐标交叉点?

1 个答案:

答案 0 :(得分:2)

您可以通过分析处理它,即如果您的数据来自公式,您可以使用数学来求解交集。

或者你可以通过GDI+的一点帮助来近似我们。

正如您发现在一组人口稀少的点中直接使用DataPoints将无法正常工作。

但是有一个有趣且简单的解决方法可以为您创建一组放大的点。

为此,您需要使用展平 GraphicsPath

我们假设您的值位于List<PointF> points

List<PointF> points = new List<PointF>();
for (int i = 0; i < 10; i++) points.Add(new PointF(i, (float)Math.Sin(i)));

现在您首先从中创建一个GraphicsPath

using System.Drawing.Drawing2D;
.. 
..
GraphicsPath gp = new GraphicsPath();
gp.AddCurve(points.ToArray());

然后你把它弄平:

Matrix m = new Matrix();    // identity
gp.Flatten(m, yourFlatness);

这会将GraphicsPath系列曲线(与Chart的样条曲线btw相同)更改为系列细分。 “平坦度”决定了线条与曲线的偏差程度。因此,您使用的平坦度越小(默认值为0.25f),您获得的分段越多。

我们已经开始使用下面显示的10 DataPoints红色。在使用0.1f0.01f0.001f展平后,我们分别得到1955152点/线段..:

enter image description here

您可以在gp.PathPoints数组中访问它们,并且可以更接近真正的交叉点。添加一点插值,你应该足够接近爵士乐..