Как мне найти угол поворота большой оси эллипса, учитывая его ограничивающий прямоугольник? - PullRequest
4 голосов
/ 25 сентября 2008

У меня эллипс с центром в (0,0) и ограничивающий прямоугольник: x = [-5,5], y = [-6,6]. Эллипс пересекает прямоугольник в точках (-5,3), (- 2,5,6), (2,5, -6) и (5, -3)

Я больше ничего не знаю об эллипсе, но мне нужно знать только то, на какой угол повернута большая ось.

кажется, что ответ должен быть очень простым, но я просто не вижу его ... спасибо за помощь!

Ответы [ 3 ]

3 голосов
/ 25 сентября 2008

Градиент эллипса идентичен градиенту пересечений с ограничительным прямоугольником вдоль одной стороны эллипса. В вашем случае это линия от (-2,5,6) до (5, -3), верхняя сторона вашего эллипса. Эта линия имеет вертикальное падение 9 и горизонтальный пробег 7,5.

Итак, мы получаем следующий прямоугольный треугольник.

(-2.5,6)
  *-----
  |\x
  | \
  |  \
9 |   \
  |    \
  |    x\
  +------* (5,-3)
    7.5

Угол, который мы ищем, равен x, который одинаков в обоих местах.

Мы можем рассчитать как:

   -1
tan   (9/7.5)

, что дает нам угол -50,19 градуса

2 голосов
/ 25 сентября 2008

Если (0, 0) - центр, то уравнение вашего эллипса:

F (x, y) = Ax ^ 2 + By ^ 2 + Cxy + D = 0

Для любого данного эллипса не все коэффициенты A, B, C и D определяются однозначно. Можно умножить уравнение на любую ненулевую константу и получить новое уравнение того же эллипса.

4 балла У вас есть 4 уравнения, но поскольку эти точки представляют собой две пары симметричных точек, эти уравнения не будут независимыми. Вы получите 2 независимых уравнения. Вы можете получить еще 2 уравнения, используя тот факт, что эллипс касается прямоугольника в точках шланга (я так понимаю).

Так что, если F (x, y) = Ax ^ 2 + By ^ 2 + Cxy + D Ваши условия:
dF / dx = 0 в точках (-2,5,6) и (2,5, -6)
dF / dy = 0 в точках (-5,3) и (5, -3)

Вот четыре линейных уравнения, которые вы получите

F(5, -3) = 5^2 * A + (-3)^2 * B + (-15) * C + D = 0  
F(2.5, -6) = (2.5)^2 * A + (-6)^2 * B + (-15) * C + D = 0  
dF(2.5, -6)/dx = 2*(2.5) * A + (-6) * C = 0  
dF(5, -3)/dy = 2*(-3) * B + 5 * C = 0  

После небольшой уборки:

   25A +  9B - 15C + D = 0 //1
6.25A + 36B - 15C + D = 0 //2
   5A       -  6C     = 0 //3
      -  6B +  5C     = 0 //4

Тем не менее, не все 4 уравнения являются независимыми, и это хорошо. Множество однородно, и если бы они были независимыми, вы бы получили уникальное, но бесполезное решение: A = 0, B = 0, C = 0, D = 0.

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

   25A + 9B - 15C = 1 //1
   5A      -  6C = 0 //3
      - 6B +  5C = 0 //4

Отсюда Вы получаете: A = 4/75, B = 1/27, C = 2/45 (D, конечно, -1)

Теперь, чтобы добраться до угла, примените преобразование координат:

x = ξcos(φ) - ηsin(φ)
y = ξsin(φ) + ηcos(φ)

(я просто не мог удержаться, чтобы использовать эти буквы :))
к уравнению F (x, y) = 0

F(x(ξ, η), y(ξ, η)) = G(ξ, η) =
  A (ξ^2cos^2(φ) + η^2sin^2(φ) - 2ξηcos(φ)sin(φ))
+ B (ξ^2sin^2(φ) + η^2cos^2(φ) + 2ξηcos(φ)sin(φ))
+ C (ξ^2cos(φ)sin(φ) - η^2cos(φ)sin(φ) + ξη(cos^2(φ) - sin^2(φ))) + D

Используя эти две личности:

2cos(φ)sin(φ) = sin(2φ)
cos^2(φ) - sin^2(φ) = cos(2φ)

Вы получите коэффициент C ', который стоит на произведение ξη в G (ξ, η):

C '= (B-A) sin (2φ) + Ccos (2φ)

Теперь ваш вопрос: для какого угла φ коэффициент C 'исчезает (равен нулю)
Существует более одного угла φ, поскольку имеется более одной оси. В случае главной оси B '> A'

0 голосов
/ 25 сентября 2008
  1. Установить угол эллипса = 0
  2. Рассчитать 4 точки пересечения
  3. Вычислить погрешность между вычисленными точками пересечения и желаемыми (т.е. суммировать 4 расстояния).
  4. Если ошибка слишком велика, используйте секущий метод или Ньютона-Рапсона, чтобы определить новый угол для эллипса и перейти к 2.

Я использовал аналогичный подход для решения другой проблемы с эллипсом:

http://successfulsoftware.net/2008/07/18/a-mathematical-digression/

http://successfulsoftware.net/2008/08/25/a-mathematical-digression-revisited/

Смотри также:

http://en.wikipedia.org/wiki/Secant_method

http://en.wikipedia.org/wiki/Newton_Rhapson

...