Как получить среднюю точку дугового сегмента в WPF

#c# #wpf

#c# #wpf

Вопрос:

Каково наилучшее решение для получения средней точки ArcSegment в пути и обозначения ее в WPF?

введите описание изображения здесь

Комментарии:

1. Хороший вопрос. Я бы предположил, что вам нужно вычислить его на основе некоторой комбинации радиуса и средних точек?

2. Если arc каким-то образом привязана к данным viewmodel, вы можете либо добавить свойство с правильным положением метки в viewmodel, либо реализовать конвертер, который делает то же самое. С другой стороны, если вы не используете привязку к данным, вы можете просто вычислить положение метки в том же месте, где вы вычисляете параметры для дуги. Как указал Ритч , вы можете рассчитать положение на основе конечных точек, радиуса и угла…

3. Возможно, блог Чарле Петцольда будет несколько полезен.

Ответ №1:

Это должно сработать:

         //the given arc (or any other segments)
        var arc = new ArcSegment(
            point: new Point(200, 100),
            size: new Size(100, 50),
            rotationAngle: 90,
            isLargeArc: true,
            sweepDirection: SweepDirection.Counterclockwise,
            isStroked: true);

        //compose one or more segments into a collection
        var pathcoll = new PathSegmentCollection();
        pathcoll.Add(arc);

        //create a figure based on the set of segments
        var figure = new PathFigure();
        figure.Segments = pathcoll;

        //compose a collection of figures
        var figcoll = new PathFigureCollection();
        figcoll.Add(figure);

        //create a path-geometry using the figures collection
        var geom = new PathGeometry(figcoll);

        double fraction = 0.5;  //the relative point of the curve
        Point pt;               //the absolute point of the curve
        Point tg;               //the tangent point of the curve
        geom.GetPointAtFractionLength(
            fraction,
            out pt,
            out tg);
  

Надеюсь, это поможет.

Приветствия

Комментарии:

1. ‘GetPointAtFractionLength’ . это именно то, что мне было нужно! Спасибо.

2. несколько часов поиска спустя, и вот мы здесь! Спасибо!

3. GetPointAtFractionLength решил для меня так много проблем. Отличная находка!