2010-05-19 5 views
0

У меня есть datalist = 62, 76, 80, 72, 71, 75, 77, которые я хочу представить как 2D-линию, отведенную к точке. В моем приложении Wpf у меня есть холст с высотой: 173 и ширина: 455.Рисование 2D-линии на холсте

Как мне это сделать и нарисовать линию моим каталогом и использовать почти всю высоту холста? так как теперь данные просто представлены на линии внизу на холсте, а не используются (и для этого даются плохие представления данных) целая высота холста. Было бы также неплохо разместить его в центре коробки ...

ответ

3

Вам нужно будет преобразовать ваш информатор, чтобы представить всю высоту холста. Есть два очевидных способа сделать это:

1) Разделите высоту холста на наибольшее значение в вашем информаторе. Умножьте все значения в datalist на это и привяжите к этим новым точкам данных.

2) Добавьте строку, как вы сейчас, а затем применить масштаб преобразования множителя от варианта 1.

В любом случае вам не нужно центрировать сейчас, так как весь холст будет израсходован.


я вижу на обзоре вы на самом деле сказать «почти вся высота холста» и комментарий Адриана ниже является правильным в том, что я не думаю, что через нижние границы. Вот некоторые лучше псевдокод

int border = 20; //How much of the canvas you *don't* want to use 
int graphHeight = Canvas.Height - border; 
int maxValue = DataList.GetMaxValue(); 
int minValue = DataList.GetMinValue(); 

double multiplier = graphHeight/(maxValue - minValue); 

foreach(int value in DataList) 
{ 
    int distanceFromBottom = value - minValue; 
    double proportionalValue = distanceFromBottom * multiplier; 
    double newValue = proportionalValue + (border/2) // move it up to the middle of the canvas 
} 

МАГАЗИНУ newValues ​​в новом DataList и связываются с этим.

+0

Любой из них должен использовать только полотно от 62 * 173/77 до 173, оставляя все ниже пустого. –

+0

@Adrian Хороший улов, я обновил свой ответ –

+0

исправил его. Думаю, –

Смежные вопросы