Расчет ограничивающего прямоугольника дуги, нарисованной с помощью <ArcSegment>в XAML - PullRequest
2 голосов
/ 13 апреля 2011

Я пытаюсь вычислить ограничивающий прямоугольник дуги, используя атрибуты элемента ArcSegment в XAML.

Элемент ArcSegment принимает следующие атрибуты: 1) StartPoint: начальная точка дуги 2) Point: конечная точкадуги 3) Размер: радиусы X и Y эллипса 4) RotationAngle: угол поворота эллипса, определяющего дугу относительно оси X 5) IsLargeArc: флаг, указывающий, какая часть эллипса должна быть нарисована (т. е. маленькая или большая дуга) 5) SweepDirection: задает по часовой стрелке или против часовой стрелки.

Упоминается, что эллипс будет масштабирован, если невозможно отобразить дугу, используя комбинацию радиусов, указанных в атрибуте Size, и угла поворота, указанного вАтрибут RotationAngle.

Может ли кто-нибудь сказать, как на самом деле они рассчитывают масштабный коэффициент для вышеупомянутого случая.

1 Ответ

0 голосов
/ 26 апреля 2014

Они на самом деле ссылаются на большие и малые оси, а не на радиусы. Конечные точки фиксированы. Это означает, что масштаб должен быть отрегулирован, если фиксированы оба следующих угла ( и они ): угол, образованный дугой, и угол, образованный большой осью и осью x. Вы не можете указать все эти параметры и по-прежнему свободно выбирать a и b в следующем, что является просто параметрической формой эллипса [повернутой назад к выравниванию по Y и X оси]

x (θ), y (θ) = ( a cos θ, b sin θ)

Это означает, что коэффициент масштабирования - это просто значение c , такое, что

x (φ), y (φ) = ( ca cos φ, cb sin φ) = (x1, у1) для начального значения φ

и

( ca cos φ, cb sin φ) = (x2, y2) для конечного значения φ. Очевидно, что приведенное здесь объяснение верно только до вращения эллипса. Но вращение точки вокруг другой точки вряд ли доставит вам слишком много хлопот.

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