Problème avec FillPie et les angles

Résolu
Signaler
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006
-
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006
-
Bonjour à tous,
j'ai un petit problème avec mon FillPie, en faite je crée un objet dans une de mes form avec 3 valeurs différentes que je passe en paramètres dans la form2 pour pouvoir faire mon camembert. Le problème c'est qu' il ne me finit pas mon camembert, il reste un petit espace non rempli. Pourtant je pense ne pas me tromper. Voici mon code :


public
void fillpie(
int X,
int Y)
{
Graphics g =
this.CreateGraphics();

int sum = co.GetA1() + co.GetA2() + co.GetA3();

float a1 = 360*(co.GetA1()*100/sum)/100;

float a2 = 360*(co.GetA2()*100/sum)/100;

float a3 = 360*(co.GetA3()*100/sum)/100;
g.FillPie(
new SolidBrush(Color.IndianRed),X,Y,250,250,-90,a1);
g.FillPie(
new SolidBrush(Color.Ivory),X,Y,250,250,-90+a1,a2);
g.FillPie(
new SolidBrush(Color.Aquamarine),X,Y,250,250,(-90+a1+a2),a3);
}

Les valeurs a1 a2 et a3 sont les 3 valeurs à partir duquel je crée le camembert.

Merci d'avance



Kbitnik

6 réponses

Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Et l'utilisation de 365 est mauvaise avec d'autres valeurs pour GetAx...

Ton problème n'est pas là, c'est plutôt une perte de données au niveau du calcul.
sum étant un int, la division donne un int, et donc une sacré perte de données.

> float sum co.GetA1() + co.GetA2() + co.GetA3();

/*
coq
MVP Visual C#
*/
Messages postés
6351
Date d'inscription
samedi 1 juin 2002
Statut
Modérateur
Dernière intervention
2 août 2014
98
Salut,

Si a1+a2+a3 >= 360, alors tu as un problème avec tes angles de départ.

PS : donne un titre plus clair, que je le change, pck "Pr" c'est peu engageant :p

/*
coq
MVP Visual C#
*/
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Oui je suis désolé pour le titre, j'ai fait une mauvaise manipe.
Titre : Problème avec FillPie et les angles

Et donc non la somme de a1 a2 a3 n'est pas supérieur ou égale a 360, c'est ça qui est frustrant, est-ce que les chiffres a virgule peuvent en être la cause ?



Kbitnik
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Donc j'ai fait une revérification, donc j'arrive à 360 pile pour a1+a2+a3. Donc de là, je peux normalement faire mon camembert entier vu ke l'angle d'un rond est de 360°. Le camembert démarre au bon endroit (-90), mais à la fin il manque juste un petit bout qui n'est pas rempli. C'est pas normal... Mais je ne vois pas ce qui bloque



Kbitnik
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Si je calcule a1 a2 et a3 comme ceci, je devrai obtenir 360 en tout or j'obtiens 354
float
a1 = 360*(co.GetA1()*100/sum)/100;
float a2 = 360*(co.GetA2()*100/sum)/100;
float a3 = 360*(co.GetA3()*100/sum)/100;

et par contre si j'uitilise ceci, j'obtiens 360 :
float a1 = 365*(co.GetA1()*100/sum)/100;
float a2 = 365*(co.GetA2()*100/sum)/100;
float a3 = 365*(co.GetA3()*100/sum)/100;

C'est trop bizarre !!



Kbitnik
Messages postés
125
Date d'inscription
mercredi 15 novembre 2000
Statut
Membre
Dernière intervention
2 mars 2006

Ahh ouais, ça fonctionne maintenant ! Je te remercie beaucoup coq



Kbitnik