2010-05-19 7 views
0

J'ai le datalist = 62, 76, 80, 72, 71, 75, 77 que je veux présenter comme un point 2D dessiné. Dans mon application Wpf j'ai une toile avec la hauteur: 173 et la largeur: 455.Dessiner une ligne 2D sur un canevas

Comment puis-je y faire et tracer une ligne par mon datalist et utiliser presque toute la hauteur de la toile? comme c'est le cas maintenant les données sont juste représentées sur une ligne en bas de la toile, n'utilisant pas (et donc donnant une mauvaise représentation des données) toute la hauteur de la toile. Il serait également agréable de le placer au centre de la boîte aussi ...

Répondre

3

Vous aurez besoin de transformer votre datalist pour représenter toute la hauteur de la toile. Il y a deux manières évidentes de le faire:

1) Divisez la hauteur du canevas par la plus grande valeur de votre datalist. Multipliez toutes les valeurs dans le datalist par ceci et liez-les à ces nouveaux points de données.

2) Ajoutez la ligne que vous êtes maintenant et appliquez une échelle de transformation du multiplicateur de l'option 1.

Quoi qu'il en soit, vous ne devriez pas avoir de centrer depuis maintenant toute la toile sera épuisée.


Je vois sur l'examen que vous dites en fait « presque toute la hauteur de la toile » et le commentaire de Adrian ci-dessous est correct que je ne pensais pas à travers les bornes inférieures. Voici un meilleur pseudo-code

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 
} 

Enregistrez les nouvelles valeurs dans une nouvelle liste de données et attachez-y.

+0

L'un ou l'autre ne doit utiliser que le canevas de 62 * 173/77 à 173, en laissant tout ce qui est en blanc. –

+0

@Adrian Bonne prise, j'ai mis à jour ma réponse –

+0

vous l'avez réparé, je pense que –

Questions connexes