我正在一个项目中,我必须将真实世界坐标中的某些点可视化到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地图被拉伸,这是现实世界的不准确的可视化。我将我的与另一个软件的结果进行了比较。以下图片是我创建的:
答案 0 :(得分:3)
您需要保持宽高比。这意味着您必须为X和Y使用相同的size
更改比例。
首先找到Maximum-X尺寸和Maximum-Y尺寸,然后取较大尺寸并将其用作尺寸。
<强>更新强>
scale
。