Salut,

je suis confronté à un souci de trigonométrie dont je n'arrive pas a me sortir...

je tente simplement de dessiner (avec la classe Graphics) un camembert avec répartition des parts de façon dynamique. cependant j'ai a chaque fois des parts qui sont plutôt difforme...

voici mon code en entier qui illustre le souci(suffit de copier coller dans un projet flex):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
	creationComplete="init()">
	<mx:Script>
		<![CDATA[
			private var rayon:Number = 140;//rayon du cercle
			private var nbParts:Number = 3;//nombre de parts dans le cercle
			private var pieChart:Sprite; 
			private var precision:Number = 100;// Nombre de rayons traces dans le cercle
			private var contourWidth:Number = 2;// Taille des traits qui font le contour des triangles
 
			private function init():void
			{
				pieChart = new Sprite();
				pieChart.x = 0;
				pieChart.y = 0;
				cnvWidget.rawChildren.addChild(pieChart);
 
				// Draw white background
				var whiteBg:Sprite= new Sprite();
				drawAngle(whiteBg.graphics, 2*Math.PI, rayon+contourWidth, precision, 0xFFFFFF, 100, 0);
 
				// Get angle value in degrees
				var angle:Number = Math.floor(360/nbParts);
				//trace("stem_array.length "+allSkins.length);
				//trace("angle = "+angle);
 
				// Get angle value in radian
				var angleRadian:Number = (Math.PI * angle)/180;
				// Angle de depart
				var angleFrom:Number = Math.PI/2-angleRadian/2;
				// Angle 
				var angleAll:Number = (nbParts-1)*angleRadian;
				var ar:Number;
				var af:Number;
				var pieColor:uint = 0xFFFFFF;
				for (var i:int=0 ; i<nbParts ; i++) 
				{
 
					if (i == 1)
						pieColor = 0x00FF00;
					else if (i == 2)
						pieColor = 0x0000FF;
					else if (i == 3)
						pieColor = 0xFF0000;
					else if (i == 4)
						pieColor = 0xBBBBBB;
					else if (i == 5)
						pieColor = 0xD20070;
 
 
					var spAngle:Sprite = new Sprite();
					spAngle.x = 0;
					spAngle.y = 0;
					pieChart.addChild(spAngle);
 
					if (i == 0) 
					{
						ar = 2*Math.PI-angleAll;
						af = angleFrom;
					} else 
					{
						ar = angleRadian;
						af = angleFrom-i*angleRadian;
					}
 
					var fond_off:Sprite = new Sprite();
					fond_off.x = cnvWidget.width/2;
					fond_off.y = cnvWidget.height/2;
					spAngle.addChild(fond_off);
					drawAngle(fond_off.graphics, ar, rayon, precision, 0xCDCDCD, 100, af);
					fond_off.cacheAsBitmap = false;
 
					var fond_on:Sprite = new Sprite();
					fond_on.x = cnvWidget.width/2;
					fond_on.y = cnvWidget.height/2;
					spAngle.addChild(fond_on);
					drawAngle(fond_on.graphics, ar, rayon, precision, pieColor, 100, af);
					fond_on.cacheAsBitmap = false;
				}
			}
 
			private function drawAngle(target:Graphics, a:Number, r:Number, n:Number, col:uint, alph:Number, from:Number):void
			{
				trace("a: "+180*a/Math.PI+" | r: "+r+" | n: "+n+" | col: "+col+" | alph: "+alph+" | from: "+180*from/Math.PI);
				target.clear();
				target.lineStyle(0, 0, 0);
				target.beginFill(col, alph);
				target.moveTo(0, 0);
				target.lineTo(rayon, 0);
				var teta:Number = from;
				var dteta:Number = 2*Math.PI/n;
				while ( teta < (from+a) ) 
				{
					var x:Number = r*Math.cos(teta);
					var y:Number = -r*Math.sin(teta);
					target.lineTo(x,y);
					teta += dteta;
				}
				x = r*Math.cos(from+a);
				y = -r*Math.sin(from+a);
				target.lineTo(x,y);
				target.lineTo(0,0);
				target.endFill();
			}
		]]>
	</mx:Script>
	<mx:Canvas id="cnvWidget" width="300" height="300" styleName="cnv" 
		horizontalCenter="0" verticalCenter="0" backgroundColor="#000000"
		verticalScrollPolicy="off" horizontalScrollPolicy="off">
	</mx:Canvas>
</mx:Application>
si qq'un a le temps d'y jeter un œil rapidos (parce qu'évidement j'suis pressé )
Merci