缩放旋转椭圆的X轴

问题描述

我有一个散点图,我允许通过绘制椭圆来选择点,如下所示:

enter image description here

在上图中,X轴和Y轴的缩放比例不同。我正在尝试实现允许更改每个轴的比例的功能,但是在缩放椭圆形状与轴时遇到了麻烦。更改X轴的比例以使其与Y轴匹配,可以做到这一点:

enter image description here

我知道我可以用X轴缩放椭圆的cx值来获得椭圆的新中心,但是我不知道如何算出新的rx,ry和旋转角度。因此,我的问题是一个旋转椭圆,其值为 cx,cy,rx,ry 以弧度为单位的旋转,如何在给定比例值的情况下计算椭圆的新值 s 是X轴还是Y轴?为了清楚起见,旋转是绕椭圆的中心(cx,cy)进行的。

解决方法

我想我理解您的问题。对于具有点(x,y)的轴对齐椭圆,(a*x,b*y)的形状仍然是椭圆,其中一些任意缩放因子ab作用于大半径和小半径。

但是对于旋转的椭圆,这是不正确的。除了主要和次要半径缩放比例不同之外,旋转角度也可能有所不同。

从数学上讲,问题是这样的:旋转椭圆的参数点是

ellipse1

使用θ旋转角度 r_1 r_2 原始椭圆半径。参数 t 0

现在可以找到修改后的参数,以使椭圆与上面的缩放版本匹配

ellipse2

以上两个组合为一个方程,需要求解 r_1' r_2'以及θ'的所有值 t

equation

不幸的是,我没有想到的解决方案,因为需要通过找到适当的旋转θ'来使矢量前面的RHS上组合的2×2矩阵对角线化直到这张表格

equation2

对于 r_1' r_2'来说很简单。

但是旋转需要满足两个矛盾的方程式

tan(θ') = (a/b)*tan(θ)    and     tan(θ') = (b/a)*tan(θ)

只有两个比例因子相同=> a==b才能解决。

我建议将此问题作为数学问题发布到[Mathematics.SE]中,然后再尝试将其实现为算法。也许您会有更好的运气。

,

计算不是那么容易。

以原点为中心的旋转椭圆的方程为

(c x + s y)² / a² + (s x - c y)² / b² = 1 = A x² + 2B xy + C y²

({cs表示旋转角度的余弦和正弦。)展开后,二次系数为

A = c² / a² + s² / b²,2B = 2 cs / a² - 2 sc / b²,C = s² / a² + c² / b².

有了系数后,您可以检索1/a²1/b²cs作为2x2矩阵的特征值和第一个特征向量

|A   B|
|B   C|

,旋转角由tan Θ = s / c给出。


现在让我们通过应用系数r来扩展横坐标,给出

A' = r² A,B' = r B,C' = C.

矩阵变为

|r²A   rB|
|rB     C|

再次,您将通过计算特征值和第一个特征向量来找到角度的轴和余弦/正弦。

特征值是多项式的根

z² + (r²A + C) z + r²(AC - B²)

其中ABC的计算如上,特征向量紧随其后

(r²A - z) c + rB s = 0

从中绘制s/c