2016-05-02 12 views
1

私は実際の座標の特定の点をViewBox内のキャンバスに視覚化しなければならないプロジェクトに取り組んでいます。以下は、データコレクションのサンプルです。実世界のデータをキャンバス内で正規化するwpf

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)にプロットされます。 これはまだ動作していますが、現実世界の表示が不正確であるノーマライズされたマップが伸びているため、これは正しくないことがわかりました。私は私と他のソフトウェアの結果を比較しました。以下の画像は、私が作成したものです: My result

私の期待される結果は次のとおりです。あなたは縦横比を維持する必要が enter image description here

答えて

3

。これは、XとYの両方で同じsizeでスケールを変更する必要があることを意味します。

最初に最大-Xサイズと最大-Yサイズを見つけて、それより大きなサイズを取り、それをサイズとして使用します。

UPDATE

  1. はセット全体の最小のX、最大X、Y最小及び最大Yを探します。
  2. (MaxX - MinX)と(MaxY - MinY)の間の最大値を求めます。
  3. この値はscaleとしてください。
+0

あなたはもっと喜ばせることができますか? – Skaranjit

+0

私は答えを更新しました。アスペクト比を維持するには、X軸とY軸の両方の値に同じ量を乗算しなければならないことに注意してください。 –

+0

私はあなたの答えに従っていましたが、私は縮尺で値を使用することに固執しています。私は(XMax - XMin)/(YMax - YMin)の比率を使用しました。私は同じ比率で両方を掛け合わせましたが、ちょうどそれを小さくしました。 – Skaranjit

関連する問題