我在正弦曲线图中添加了一条水平条带线,它没有很多数据点。有没有办法找到x坐标交叉点?
答案 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.1f
,0.01f
和0.001f
展平后,我们分别得到19
,55
和152
点/线段..:
您可以在gp.PathPoints
数组中访问它们,并且可以更接近真正的交叉点。添加一点插值,你应该足够接近爵士乐..