Как нарисовать круг (значение)% - PullRequest
0 голосов
/ 05 мая 2018

Я хочу использовать Path, чтобы нарисовать частично круг, такой как круг 25% (1/4, круг 90 градусов, 360 градусов - полный круг) Я могу использовать ArcSegment для этого, но 25% легко, потому что число простое, и вы можете легко угадать суть. Но когда я хочу нарисовать 20% -ый круг 1/5 72-градусного круга), я не могу больше предположить, потому что это не значение с плавающей точкой, поэтому я придумал 4 уравнения

For 0->90 degree (unit value = Degree (Eg: 20degree)) x,y = ArcSegment.Point(x,y)
 x = (PathWidth / 2) + [Sin(value) *50] 
 y = [Sin(value) *50]
For 90->180 degree 
 x, y= (PathWidth / 2) + [Sin(value) *50]
For 180->270 : Sorry I don't know ;(

Например, я хочу 25% -ный круг на пути 100x100 (начальная точка 50,0), тогда 25% - это 1/4 = 90 градусов: Применим мое уравнение, которое я упомянул выше, у нас есть:

x = (100/2) + Sin(90) * 50 = 100
y = Sin(90) * 50 = 50

Итак, ArcSegment.Point = "100,50" и мы на 50% кругом

Но я думаю, что уравнение неэффективно и, возможно, (я пока не проверяю) неточно, и нам нужно 4 уравнения, чтобы выполнить круг с частичной окружностью (1-> 99%). Не могли бы вы улучшить уравнение, которое я использую выше

Извините за мой плохой английский, потому что английский не мой родной язык.

1 Ответ

0 голосов
/ 05 мая 2018

Следующий метод создает PathGeometry с одним кругом ArcSegment, который будет работать от 0 до, но не включая 360 градусов. Центр круга - это координаты (0, 0).

Важно установить для свойства IsLargeArc ArcSegment значение true, если угол больше 180 градусов.

private Geometry CreateArc(double radius, double angle)
{
    var endPoint = new Point(
        radius * Math.Sin(angle * Math.PI / 180),
        radius * -Math.Cos(angle * Math.PI / 180));

    var segment = new ArcSegment(
        endPoint, new Size(radius, radius), 0,
        angle >= 180, SweepDirection.Clockwise, true);

    var figure = new PathFigure { StartPoint = new Point(0, -radius) };
    figure.Segments.Add(segment);

    var geometry = new PathGeometry();
    geometry.Figures.Add(figure);

    return geometry;
}

Если вам нужно нарисовать полный круг, вам необходимо добавить второй ArcSegment или вернуть EllipseGeometry.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...