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

时间:2016-05-02 07:09:01

标签: c# wpf canvas normalization

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

    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

转换现实世界数据以适应画布。我正在调用以下函数。

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从实时数据表中取出。我的画布大小是1280 X 720.例如:如果一个元素有坐标(XMax,YMax),那么它将被绘制在(1280,720)上,同样,如果一个元素有坐标(XMin,XMax),那么它将绘制在(0,0)上。 这仍然有效,但我发现这是不正确的,因为我得到的noramlized地图被拉伸,这是现实世界的不准确的可视化。我将我的与另一个软件的结果进行了比较。以下图片是我创建的: My result

我的预期结果是: enter image description here

1 个答案:

答案 0 :(得分:3)

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

首先找到Maximum-X尺寸和Maximum-Y尺寸,然后取较大尺寸并将其用作尺寸。

<强>更新

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