Я разместил a version of this answer on Math SE, так как он приносит много пользы от правильной математической верстки. Пример также прост, и есть некоторые дополнительные детали.
Нижеследующее описание следует за German Wikipedia article Hauptachsentransformation. Его английская коллега, согласно межвиковым ссылкам, составляет principal component analysis. Я считаю, что прежняя статья намного более геометрична, чем последняя. Тем не менее, последний уделяет особое внимание статистическим данным, поэтому, возможно, это будет полезно для вас.
Вращение
Ваш Эллипс описывается как
[A E/2] [x] [x]
[x y] * [E/2 B] * [y] + [C D] * [y] + F = 0
Сначала вы определить вращение. Вы делаете это, определяя собственные значения и собственные векторы этой матрицы 2 × 2. Эти собственные векторы образуют ортогональную матрицу, описывающую ваше вращение: ее записи - это Sin[alpha]
и Cos[alpha]
из вашей формулы.
С вашего номера вы получите
[A E/2] [-0.74248 0.66987] [-10.369 0 ] [-0.74248 -0.66987]
[E/2 B] = [-0.66987 -0.74248] * [ 0 -9.1715] * [ 0.66987 -0.74248]
Первый из этих трех факторов является матрица, составленная из собственных векторов, каждый нормированный на единицу длины. Центральная матрица имеет собственные значения на диагонали, а последняя - транспонирована первой. Если вы умножите вектор (x,y)
на эту последнюю матрицу, то вы измените систему координат таким образом, чтобы смешанный член исчезал, т. Е. Оси x и y параллельны основным осям вашего эллипса.Это как раз то, что происходит в вашей желаемой формуле, так что теперь вы знаете, что
Cos[alpha] = -0.74248 (-0.742479398678 with more accuracy)
Sin[alpha] = 0.66987 (0.669868899516)
Перевод
Если умножить вектор-строку [C D]
в приведенной выше формуле с первым из трех матриц, то этот эффект будет точно отмените умножение (x, y)
на третью матрицу. Поэтому в этой измененной системе координат вы используете центральную диагональную матрицу для квадратичного члена, а это произведение для линейного члена.
[-0.74248 0.66987]
[1.68052, 4.89519] * [-0.66987 -0.74248] = [-4.5269 -2.5089]
Теперь вы должны complete the square независимо друг от друга для x
и y
, и вы в конечном итоге с формой, из которой вы можете прочитать координаты центра.
-10.369x² -4.5269x = -10.369(x + 0.21829)² + 0.49408
-9.1715y² -2.5089y = -9.1715(y + 0.13677)² + 0.17157
h = -0.21829 (-0.218286476695)
k = -0.13677 (-0.136774259156)
Обратите внимание, что h
и k
описывают центр в уже повернуты системе координат; чтобы получить исходный центр, вы снова будете умножаться с первой матрицей:
[-0.74248 0.66987] [-0.21829] [0.07045]
[-0.66987 -0.74248] * [-0.13677] = [0.24778]
, который подходит для вашего описания.
Scaling
Заполненные квадраты выше способствовали еще некоторые условия для постоянного множителя F
:
6.09234 + 0.49408 + 0.17157 = 6.7580
Теперь вы переместили это в правой части уравнения, а затем разделить все уравнение по этому номеру так что вы получите = 1
из своей желаемой формы. Затем вы можете вывести радиусы.
1 -10.369
-- = ------- = 1.5344
r² -6.7580
1 -9.1715
-- = ------- = 1.3571
s² -6.7580
r = 0.80730 (0.807304599162099)
s = 0.85840 (0.858398019487315)
Проверка результата
Теперь давайте проверим, что мы не делали каких-либо ошибок. С параметрами, которые мы нашли, вы можете кусочкам уравнение
((-0.74248*x - 0.66987*y + 0.21829)^2)/(0.80730^2)
+ ((0.66987*x - 0.74248*y + 0.13677)^2)/(0.85840^2) = 1
подведите 1
на левую сторону, и умножаем на -6.7580
, и вы должны в конечном итоге с исходным уравнением. Expanding that (с дополнительными версиями точности, напечатанных в скобках), вы получите
-9.8317300000 x^2
-1.1913300000 x y
+1.6805200000 x
-9.7089100000 y^2
+4.8951900000 y
+6.0923400000
, который идеально подходит для ввода.
'(h, k)' не является точно центром; это центр в уже повернутой системе координат. Если вам нужен реальный центр, вам придется писать такие вещи, как '(x-h) Cos [alpha]' и так далее. – MvG
Для будущих вопросов, подобных этому, http://math.stackexchange.com/, возможно, лучше спросить. С одной стороны, вопрос более математичен, чем связанный с программированием в природе, а с другой стороны, форматирование формул там намного лучше, используя MathJax. – MvG
Кроме того, имеется специальный сайт StackExchange для * Mathematica *: http://mathematica.stackexchange.com/ –