Может ли кто-нибудь показать математику для рисования полукруга между двумя произвольными точками, используя ArcSegment в WPF.
Я очень смущен RadiusX, RadiusY в ArcSegment. Это не похоже на две точки, а на оси X и Y. Так оно и должно быть?
Может ли кто-нибудь показать математику для рисования полукруга между двумя произвольными точками, используя ArcSegment в WPF.
Я очень смущен RadiusX, RadiusY в ArcSegment. Это не похоже на две точки, а на оси X и Y. Так оно и должно быть?
Вы правы, Size
of ArcSegment
не является радиусом между точками, которые определяют начало и конец дуги. Это свойство описывает, насколько большой эллипс, который будет нарисован между этими точками, должен быть. Если вы хотите иметь круг вместо эллипса, вы должны помнить, что всегда задавать значения размера x и y одинаковыми. Если вы хотите, чтобы у вас была половина круга, вам также нужно убедиться, что Size
будет на половину расстояния между этими двумя точками.
Например, посмотрите на код ниже:
<Canvas>
<Path Stroke="Black">
<Path.Data>
<PathGeometry>
<PathFigure StartPoint="100,100">
<ArcSegment IsLargeArc="True"
Size="50, 50"
Point="200, 100"
SweepDirection="Clockwise" />
</PathFigure>
</PathGeometry>
</Path.Data>
</Path>
</Canvas>
Это нарисует верхнюю половину круга, которая начинается с точки 100, 100
и заканчивается в точке 200, 100
. Поскольку для свойства Size
установлено значение 50, 50
(расстояние между этими точками равно 100), это создаст ровно половину круга. SweepDirection
указывает, что круг должен быть нарисован по часовой стрелке, и причина, по которой она будет тянуть верхнюю половину. Проверьте разницу между Clockwise
и Counterclockwise
на следующих экранах:
IsLargeArc
выбирает, следует ли рисовать большую часть эллипса или меньше. Поскольку я рисую половину круга, это не имеет никакого значения, но если вы нарисуете эллипс разного размера, это значительно изменит внешний вид, просто поиграйте с ним, чтобы увидеть, как он работает.
Вот как это выглядит, когда вы пытаетесь поместить 200, 200
размер дуги, Clockwise
, используя свою большую дуговую часть. Как вы можете видеть - дуга даже не подходит к окну (это снято с дизайнера WPF, в обычной части переполнения приложения будет отключено)
И это то же самое, но для отображения небольшой дуги:
Когда я изменил свойство Size
на 200, 200
, рисованный круг просто в 4 раза больше, но все же начинается и заканчивается в точках, которые вы определили. Size
не имеет ничего общего с точками, между которыми вы рисуете свой эллипс /cricle, но он меняет вид эллипса.
Я надеюсь, что он покажет вам, что означает Size
в ArcSegment
, не стесняйтесь задавать более подробные вопросы, если вы все еще запутались.