Если Вы говорите о выполнении чего-то сторона клиента, я не уверен, что это возможно из-за соображений безопасности.
, Возможно, Ваш лучший выбор был бы апплетом Java - но снова это должно быть проверено по политике локальной защиты.
, Если я пытаюсь думать о некотором взломе в JS, чтобы сделать это, возможно, можно попытаться отправить асинхронный запрос с функцией обратного вызова, которая измеряет миллисекунды, которые это взяло - но это просто первое, что пришло на ум.
GraphicsPath.AddArc делает именно то, что вы его просите, - это дуга, идущая вверх от центра эллипса под точным углом 135 градусов по часовой стрелке от оси x.
К сожалению, это не помогает, когда вы используете угол как прямую пропорцию среза круговой диаграммы, который вы хотите нарисовать. Чтобы узнать угол B, который вам нужно использовать с AddArc, учитывая угол A, который работает на окружности, в радианах используйте:
B = Math.Atan2(sin(A) * height / width, cos(A))
Где width и height - это те из эллипс.
В вашем примере кода попробуйте добавить следующее в конец Form1_Paint:
ellipticalPath = new System.Drawing.Drawing2D.GraphicsPath();
ellipticalPath.AddArc(
ellipseBounds,
0.0F,
(float) (180.0 / Math.PI * Math.Atan2(
Math.Sin(135.0 * Math.PI / 180.0) * ellipseBounds.Height / ellipseBounds.Width,
Math.Cos(135.0 * Math.PI / 180.0))));
e.Graphics.DrawPath(Pens.Black, ellipticalPath);
Результат должен выглядеть следующим образом: альтернативный текст http://img216.imageshack.us/img216/1905/arcs.png[126 visible