【问题标题】:Standard form of ellipse椭圆的标准形式
【发布时间】:2013-08-04 02:05:27
【问题描述】:

我将椭圆作为拟合数据集的水平曲线。选择特定椭圆后,我想将其报告为中心点、半长轴和短轴长度以及旋转角度。换句话说,我想从以下形式转换(使用mathematica)我的椭圆方程:

Ax^2 + By^2 + Cx + Dy + Exy + F = 0

到更标准的形式:

((xCos[alpha] - ySin[alpha] - h)^2)/(r^2) + ((xSin[alpha] + yCos[alpha] - k)^2)/(s^2) = 1

其中(h,k) 是中心,alpha 是旋转角度,rs 是半轴

我试图转换的实际方程是

 1.68052 x - 9.83173 x^2 + 4.89519 y - 1.19133 x y - 9.70891 y^2 + 6.09234 = 0

我知道中心点是拟合的最大值,即:

 {0.0704526, 0.247775}

【问题讨论】:

  • (h,k) 不完全是中心;它是已经旋转的坐标系中的中心。如果你想要真正的中心,你必须写(x-h)Cos[alpha]之类的东西。
  • 对于像这里这样的未来问题,math.stackexchange.com 可能是一个更好的提问地方。一方面,这个问题本质上比编程相关的问题更数学化,另一方面,使用 MathJax 的公式格式要好得多。
  • 另外还有一个专门的 StackExchange 站点供 Mathematica 使用:mathematica.stackexchange.com

标签: math wolfram-mathematica ellipse


【解决方案1】:

我发布了a version of this answer on Math SE,因为它从正确的数学排版中受益匪浅。上面的例子也比较简单,还有一些额外的细节。

以下描述遵循German Wikipedia article Hauptachsentransformation。根据跨wiki链接,它的英文对应物是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]

现在您必须为xy 独立地complete the square,最终得到一个表格,您可以从中读取中心坐标。

-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)

注意hk描述的是已经旋转的坐标系中的中心;要获得原始中心,您将再次与第一个矩阵相乘:

[-0.74248  0.66987]   [-0.21829]   [0.07045]
[-0.66987 -0.74248] * [-0.13677] = [0.24778]

符合你的描述。

缩放

上面完成的正方形为常数因子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

这与您的输入完美匹配。

【讨论】:

    【解决方案2】:

    如果您有hk,您可以使用拉格朗日乘数来最大化/最小化函数(x-h)^2+(y-k)^2,但要受椭圆上的约束。最大距离是大半径,最小距离是小半径,alpha 是它们从水平方向旋转的距离。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-19
      • 2014-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      相关资源
      最近更新 更多