2016-05-02 1 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, уты вынимают из таблицы данных в реальное время. Размер моего холста составляет 1280 X 720. Например: если элемент имеет координату (XMax, YMax), тогда он будет нанесен на (1280,720), а также, если элемент имеет координату (XMin, XMax), тогда он будет отображаться на (0,0). Это все еще работает, но я обнаружил, что это неверно, потому что карта, которую я получаю, растянута, что является неточной визуализацией реального мира. Я сравнил мой результат с другим программным обеспечением. Следующее изображение, что я создал: My result

Мой ожидаемый результат: enter image description here

ответ

3

Вы должны сохранить пропорции. Это означает, что вам нужно будет изменить масштаб с тем же size как для X, так и для Y.

Сначала найдите размер Максимального размера и Максимальный 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