【问题标题】:How to get the X value from a known Y value for a line chart in C#?如何从 C# 中的折线图的已知 Y 值中获取 X 值?
【发布时间】:2015-05-13 22:48:13
【问题描述】:

我正在用 C# 创建一个图表,它绘制一个 X 值(距离)与 Y(时间)。 该图有两条线:一条要比较的线(我们可以称为 IdealDistance)和一条从外部输入生成的线(RealDistance)。

我想在添加时将 RealDistance X 值与 IdealDistance X 值进行比较,但不知道如何在已知时间返回 IdealDistance X 值(或 IdealDistance Y 值)。

IdealDistance 线由每秒间隔开的多个数据点组成,所需的检查每 100 毫秒完成一次,因此遗憾的是不能简单地使用 IdealDistance 数据点集。

  • 如何在给定的 Y 轴值处获取我的系列之一的 X 轴值?

【问题讨论】:

    标签: c# charts axis series


    【解决方案1】:

    如果你取两个数据点(a 和 b),你可以使用直线方程得到它们之间任意 X 点的 Y(或任意 Y 点的 X):

    public static int GetX(int y, Point a, Point b)
    {
        var m = CalculateSlope(a, b);
    
        // Horizontal line (x-values are always the same)
        if (m == 0.0)
            return a.X;
    
        var c = a.Y - a.X * m;
    
        return Convert.ToInt32((y - c) / m);
    }
    
    public static int GetY(int x, Point a, Point b)
    {
        var m = CalculateSlope(a, b);
    
        // Vertical line (y-values are always the same)
        if (double.IsPositiveInfinity(m))
            return a.Y;
    
        var c = a.Y - a.X * m;
    
        return Convert.ToInt32(m * x + c);
     }
    
    
    public static double CalculateSlope(Point a, Point b)
    {
        if (b.Y == a.Y)
            return double.PositiveInfinity;
    
        if (b.X == a.X)
            return 0.0;
    
        return (Convert.ToDouble(b.Y) - Convert.ToDouble(a.Y)) / (Convert.ToDouble(b.X) - Convert.ToDouble(a.X));
    }
    

    【讨论】:

    • 这是处理线条的好方法。但是,有没有办法解释是否存在带软角的样条类型?
    • 我想你说的是不规则曲线的计算方程?如果是这样,数学会变得有点复杂。
    • 是的,需要这样做。没关系,我现在会坚持使用折线图。将更容易实现像素方法来确定曲线图的位置。如果您将其更改为正确实现 GetX 而不是 GetY,我会将您的答案标记为正确,或者我可以更新我如何实现基于您的但略有不同的代码。
    • @Luke 我添加了 GetX 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2019-05-04
    • 2014-01-17
    • 1970-01-01
    相关资源
    最近更新 更多