规范化 canvas wpf 中的真实世界数据

normalizing real world data inside the canvas wpf

我在一个项目中工作,我必须在 ViewBox 中将现实世界坐标中的某些点可视化到 canvas 中。以下是数据收集的示例:

    X               Y
-40085.119      266560.373  
-40084.72       266560.736
-40083.51165    266559.4097
-41606.37001    263437.3891
-40098.72351    266327.5417
-40075.57653    266399.5039
-40076.09771    266398.6382
-40629.41856    265374.2896
-40698.41477    265214.1637

转换真实世界的数据以适应 canvas。我正在调用以下函数。

public double changeScale(double point, double min, double max, double size){
    double convertedValue;
    convertedValue = (point - min) / (max - min);
    convertedValue *= size;
    return convertedValue;
}

我使用规定的功能如下:

sc.changeScale(x, xmax, xmax, mycanvas.Width)
sc.changeScale(y, ymax, ymin, mycanavs.Height)

xmin,xmax和ymin,ymax是从实时数据table中取出来的。我的 canvas 的大小是 1280 X 720。例如:如果一个元素的坐标为 (XMax, YMax),那么它将绘制在 (1280,720) 上,同样,如果一个元素的坐标为 (XMin, XMax) ), 那么它将绘制在 (0,0) 上。 这仍然有效,但我发现这是不正确的,因为我得到的 noramlized 地图被拉伸了,这是对现实世界的不准确可视化。我将我的结果与另一个软件的结果进行了比较。下图是我创建的:

我的预期结果是:

您需要保持宽高比。这意味着您必须使用相同的 size 更改 X 和 Y 的比例。

先求Maximum-X size和Maximum-Y size,然后取大的作为size。

更新

  1. 找出整个集合的最小 X、最大 X、最小 Y 和最大 Y。
  2. 找到 (MaxX - MinX) 和 (MaxY - MinY) 之间的最大值。
  3. 将该值用作 scale