# Drawing Pie Chart in Symbian

• 2010-05-11, 05:26
sunitha.m13
Drawing Pie Chart in Symbian
Hi,
I want to show the percentage of the score as [B]Pie Chart[/B].
Can anyone help me in drawing pie chart in Symbian.
In some other thread, some one is telling [B]Math::Sin()[/B] or [B]Math::Cos()[/B] functions.
What is the relation of these functions with Pie chart ? How can I draw ?
• 2010-05-11, 08:14
wizard_hu_
Re: Drawing Pie Chart in Symbian
Those other threads are right. Sine and cosine are trigonometric functions ([url]http://en.wikipedia.org/wiki/Trigonometric_functions[/url]), particularly useful for coordinate geometry. And you actually do need the resulting coordinates of geometric transformations.
In short: when you want x and y to traverse around a circle with radius r, you can use[CODE]x = r * cos (a)
y = r * sin (a)[/CODE]where a is an angle, running from 0 to 2*pi (most computing environments expect you to provide angles in radians, [url]http://en.wikipedia.org/wiki/Radian[/url])
For expressing 100% as a full circle[CODE]a = p / 100 * 2 * pi = p * pi /50[/CODE]can be used, where p is a percentage.
• 2010-05-20, 08:40
sunitha.m13
Re: Drawing Pie Chart in Symbian
[QUOTE=wizard_hu_;735118]Those other threads are right. Sine and cosine are trigonometric functions ([url]http://en.wikipedia.org/wiki/Trigonometric_functions[/url]), particularly useful for coordinate geometry. And you actually do need the resulting coordinates of geometric transformations.
In short: when you want x and y to traverse around a circle with radius r, you can use[CODE]x = r * cos (a)
y = r * sin (a)[/CODE]where a is an angle, running from 0 to 2*pi (most computing environments expect you to provide angles in radians, [url]http://en.wikipedia.org/wiki/Radian[/url])
For expressing 100% as a full circle[CODE]a = p / 100 * 2 * pi = p * pi /50[/CODE]can be used, where p is a percentage.[/QUOTE]

but its not displaying with respect to percentage given.
see my code:
[CODE][B]TInt p = 50; // percentage[/B]
TReal src = (p * 360) / 100;
RDebug::Print(_L("---> src = %f"), src);
TInt r = 155;
TReal result;

Math::Cos([B]result[/B], src);
[B] TInt x = r * result;[/B]
RDebug::Print(_L("result X = %d"), result);
RDebug::Print(_L("x = %d"), x);

Math::Sin ([B]result[/B], src);
[B]TInt y = r * result;[/B]
RDebug::Print(_L("result Y = %d"), result);
RDebug::Print(_L("y = %d"), y);

// draw a pie slice centered in the rectangle
gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
gc.SetBrushColor(KRgbRed);
TRect ellipseRect=Rect(); // for arcs and ellipse
ellipseRect.SetWidth(250);
ellipseRect.SetHeight(250);
ellipseRect.Shrink(10,10); // set size so inside the border rectangle

//TRect rect;
TPoint screenCenterPoint=ellipseRect.Center(); // the center of the screen
// set up a pair of construction points for arc and pie slice drawing
TPoint constructionPoint1(210,125); // outside the construction ellipse
TPoint constructionPoint2(y,x); // inside the construction ellipse
TSize size(250,250);
gc.DrawRoundRect(ellipseRect,size);
//gc.DrawPie(ellipseRect,constructionPoint1,constructionPoint2);
// draw the other portion of the elliptical disc
gc.SetBrushColor(KRgbGreen);
gc.DrawPie(ellipseRect,constructionPoint1,constructionPoint2);[/CODE]
• 2010-05-20, 09:24
wizard_hu_
Re: Drawing Pie Chart in Symbian
[QUOTE=sunitha.m13;738577]see my code:
[CODE][B]TInt p = 50; // percentage[/B]
TReal src = (p * 360) / 100;[/CODE][/QUOTE]I see it. Guess why I wrote "a = p / 100 * 2 * pi = p * pi /50".
Computing languages measure angles in radians ("RAD" mode on a scientific calculator), while your code does that in degrees ("DEG" mode).
2*pi (~6.2832) radians are 360 degrees, a full circle. Replace 360 with 2*pi (2*KPi in Symbian C++), and it will be better.
• 2010-05-20, 10:02
sunitha.m13
Re: Drawing Pie Chart in Symbian
[QUOTE=wizard_hu_;738598]I see it. Guess why I wrote "a = p / 100 * 2 * pi = p * pi /50".
Computing languages measure angles in radians ("RAD" mode on a scientific calculator), while your code does that in degrees ("DEG" mode).
2*pi (~6.2832) radians are 360 degrees, a full circle. Replace 360 with 2*pi (2*KPi in Symbian C++), and it will be better.[/QUOTE]

I have changed 360 to 2*KPi, but still no change. Its not drawing correctly.
I guess I need to change the logic behind the [COLOR="DarkGreen"]constructionPoint1 [/COLOR]& [COLOR="DarkGreen"]constructionPoint2[/COLOR]

TPoint [B]constructionPoint1(210,125)[/B]; // outside the construction ellipse
TPoint [B]constructionPoint2(x,y)[/B]; // inside the construction ellipse
gc.DrawPie(ellipseRect,constructionPoint1,constructionPoint2);
• 2010-05-20, 10:51
wizard_hu_
Re: Drawing Pie Chart in Symbian
Those points should be absolute coordinates, so add a[CODE]constructionPoint2+=screenCenterPoint;[/CODE], and it is going to get much better. After that try with various p-s (0, 25, 50, 75), and you will see that constructionPoint1 needs to be re-calculated, because it represents something else than 0% (25% or 75%, I have not checked exactly, but it is a quarter pie to one direction).
• 2010-05-20, 11:25
sunitha.m13
Re: Drawing Pie Chart in Symbian
Yes...its drawing as expected but in reverse direction.
Can you tell me how to change the direction of drawing ?

I tried to give negative sign for the co-ordinates, but entire calculation goes wrong with that.
• 2010-05-22, 13:57
tamhanna
Re: Drawing Pie Chart in Symbian
invert the angle

look at the angle from 0 to 360 degrees and then think what you have to add or subtract.