algorithm - 有没有其他方法可以计算其他坐标系坐标中的 X 值?

标签 algorithm coordinates

抱歉,主题名称很奇怪,但我不知道该怎么命名。 enter image description here

问题是..我有一个 zedgraph 控件。里面画了一些线。

我有图表区域左边界和图表区域右边界的坐标。

我在 zedgraph 控件上绘制垂直线作为 PictureBoxes,因此它们在不同的坐标中移动。此垂直线可以向左和向右移动。

这样我试图在 XAxis 的坐标中获得 X 值:

public double Get_X_InContextOfChart(int left_coord_of_border) //Left of vertical line
{
    //zed_graph.GraphPane.XAxis.Scale.Min is minimal X value shown on XAxis
    //zed_graph.GraphPane.Chart.Rect.Left is Left of YAxis
    //Same for else if, aside of using Right and maximum X at right
    if (zed_graph.GraphPane.XAxis.Scale.Min != 0) //to avoid division by zero
        return (left_coord_of_border * zed_graph.GraphPane.XAxis.Scale.Min) / zed_graph.GraphPane.Chart.Rect.Left;
    else if (zed_graph.GraphPane.XAxis.Scale.Max != 0)
        return (left_coord_of_border * zed_graph.GraphPane.XAxis.Scale.Max) / zed_graph.GraphPane.Chart.Rect.Right;

    return double.NaN;
}

只要使用 else if,此代码就可以很好地计算 X,但在我的示例中,它计算出一些错误。

我希望有人能理解这一点。

更新了新代码:

public double Get_X_InContextOfChart(int left_coord_of_border)
{
   double scale_left = zed_graph.GraphPane.XAxis.Scale.Min;
   double scale_right = zed_graph.GraphPane.XAxis.Scale.Max;
   double graph_width = zed_graph.GraphPane.Chart.Rect.Width;
   double x = left_coord_of_border;

   return scale_left + (scale_right - scale_left) / graph_width * x;
}

结果: enter image description here

最佳答案

scale_left = -0.1
scale_right = 0.9
graph_width = 540 // pixels
x = 190           // pixels

scale_x = scale_left + (scale_right - scale_left) / graph_width * x  // 0.25

关于algorithm - 有没有其他方法可以计算其他坐标系坐标中的 X 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444682/

相关文章:

ruby - 在没有 ruby 循环的情况下从范围编号中计算相同的包含编号

algorithm - 访问无向图中的边、顶点

android - 我可以将 motionEvent .getRawY() 与 View 一起使用吗?获取顶部()?

java - 将点从坐标系(0,800)转换为坐标系(50,-50)jFrame<->opengl

sql - 确定一个坐标是否在另一个半径内

iphone - 计算两个坐标之间的距离和路线

android - 减少样本数量的技术和算法

c# - 适用于由线集合定义的 map 的寻路算法

java - 当达到最大链长度时调整哈希表的大小

javascript - 传单 map 并不总是加载居中的相同 WMS 平铺层