如何从 C# 中的折线图的已知 Y 值获取 X 值?
How to get the X value from a known Y value for a line chart in C#?
我正在用 C# 创建一个图表,其中绘制了 X 值(距离)与 Y(时间)的关系。
该图有两条线:一条用于比较的线(我们可以称为 IdealDistance)和一条从外部输入生成的线(RealDistance)。
我想在添加时将 RealDistance X 值与 IdealDistance X 值进行比较,但不知道如何 return 已知时间的 IdealDistance X 值(或 IdealDistance Y 值).
IdealDistance 线由每秒间隔开的多个数据点组成,所需的检查每 100 毫秒进行一次,因此不幸的是不能简单地使用 IdealDistance 数据点集。
- 如何在给定的 Y 轴值下获得我的系列之一的 X 轴值?
如果你取两个数据点(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));
}
我正在用 C# 创建一个图表,其中绘制了 X 值(距离)与 Y(时间)的关系。
该图有两条线:一条用于比较的线(我们可以称为 IdealDistance)和一条从外部输入生成的线(RealDistance)。
我想在添加时将 RealDistance X 值与 IdealDistance X 值进行比较,但不知道如何 return 已知时间的 IdealDistance X 值(或 IdealDistance Y 值).
IdealDistance 线由每秒间隔开的多个数据点组成,所需的检查每 100 毫秒进行一次,因此不幸的是不能简单地使用 IdealDistance 数据点集。
- 如何在给定的 Y 轴值下获得我的系列之一的 X 轴值?
如果你取两个数据点(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));
}