Получение конечной точки в ArcSegment с начальными X / Y и начальными + углами развертки

Есть ли у кого-нибудь хороший алгоритм вычисления конечной точки ArcSegment ? Это не круговая дуга - это эллиптическая дуга.

Например, у меня есть эти начальные значения:

  • Начальная точка X = 0,251
  • Начальная точка Y = 0,928
  • Радиус ширины = 0,436
  • Радиус высоты = 0,593
  • Начальный угол = 169,51
  • Угол развертки = 123,78

Я знаю, что место, где должна закончиться моя дуга, находится примерно в районе X = 0,92 и Y = 0,33 (с помощью другой программы), но я это необходимо сделать в ArcSegment с указанием конечной точки. Мне просто нужно знать, как вычислить конечную точку, чтобы она выглядела так:


Кто-нибудь знает, как это правильно вычислить? (Я не думаю, что это имеет значение, что это WPF или любой другой язык, поскольку математика должна быть такой же.)

Вот изображение. image depicting arc


РЕДАКТИРОВАТЬ: Я обнаружил, что есть подпрограмма под названием DrawArc с перегрузкой в ​​.NET GDI + , которая в значительной степени делает то, что мне нужно (подробнее о «в значительной степени» через секунду).

Чтобы упростить просмотр, возьмите следующий пример:

Public Sub MyDrawArc(e As PaintEventArgs)

    Dim blackPen As New Pen(Color.Black, 2)
    Dim x As Single = 0.0F
    Dim y As Single = 0.0F
    Dim width As Single = 100.0F
    Dim height As Single = 200.0F

    Dim startAngle As Single = 180.0F
    Dim sweepAngle As Single = 135.0F

    e.Graphics.DrawArc(blackPen, x, y, width, height, startAngle, sweepAngle)

    Dim redPen As New Pen(Color.Red, 2)
    e.Graphics.DrawLine(redPen, New Point(0, 55), New Point(95, 55))
End Sub

Private Sub ImageBox_Paint(sender As Object, e As System.Windows.Forms.PaintEventArgs) Handles ImageBox.Paint
    MyDrawArc(e)
End Sub

Эта процедура прямо помещает конечную точку в X = 95, Y = 55 . Другие процедуры, упомянутые для круглых эллипсов, приведут к X = 85, Y = 29 . Если есть способ 1) Не нужно ничего рисовать и 2) e.Graphics.DrawArc возвращает координаты конечной точки, вот что Мне понадобится.

Итак, теперь вопрос проясняется - кто-нибудь знает, как реализован e.Graphics.DrawArc ?

7
задан Stan 29 March 2011 в 00:20
поделиться