问题描述
在上图中,X轴和Y轴的缩放比例不同。我正在尝试实现允许更改每个轴的比例的功能,但是在缩放椭圆形状与轴时遇到了麻烦。更改X轴的比例以使其与Y轴匹配,可以做到这一点:
我知道我可以用X轴缩放椭圆的cx值来获得椭圆的新中心,但是我不知道如何算出新的rx,ry和旋转角度。因此,我的问题是一个旋转椭圆,其值为 cx,cy,rx,ry 和以弧度为单位的旋转,如何在给定比例值的情况下计算椭圆的新值 s 是X轴还是Y轴?为了清楚起见,旋转是绕椭圆的中心(cx,cy)进行的。
解决方法
我想我理解您的问题。对于具有点(x,y)
的轴对齐椭圆,(a*x,b*y)
的形状仍然是椭圆,其中一些任意缩放因子a
和b
作用于大半径和小半径。
但是对于旋转的椭圆,这是不正确的。除了主要和次要半径缩放比例不同之外,旋转角度也可能有所不同。
从数学上讲,问题是这样的:旋转椭圆的参数点是
使用θ旋转角度 r_1 和 r_2 原始椭圆半径。参数 t 从0
到2π
。
现在可以找到修改后的参数,以使椭圆与上面的缩放版本匹配
以上两个组合为一个方程,需要求解 r_1'和 r_2'以及θ'的所有值 t 。
不幸的是,我没有想到的解决方案,因为需要通过找到适当的旋转θ'来使矢量前面的RHS上组合的2×2矩阵对角线化直到这张表格
对于 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²
({c
,s
表示旋转角度的余弦和正弦。)展开后,二次系数为
A = c² / a² + s² / b²,2B = 2 cs / a² - 2 sc / b²,C = s² / a² + c² / b².
有了系数后,您可以检索1/a²
,1/b²
,c
,s
作为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²)
其中A
,B
,C
的计算如上,特征向量紧随其后
(r²A - z) c + rB s = 0
从中绘制s/c
。