【问题标题】:Scaling the X axis of a rotated ellipse缩放旋转椭圆的 X 轴
【发布时间】:2020-09-25 20:47:56
【问题描述】:

我有一个散点图,我允许通过像这样绘制一个椭圆来选择点:

在上图中,X 轴和 Y 轴的缩放比例不同。我正在尝试实现允许更改每个轴的比例的功能,但是我无法使用轴缩放椭圆形状。更改 X 轴的比例以匹配 Y 轴可以得到:

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

【问题讨论】:

  • 不要,改用转换。
  • 如何指定椭圆?你点击并拖动三个点吗?
  • 点击并拖动,然后根据鼠标拖动到原点的距离调整旋转角度和cx属性。我只是将 cy 属性设置为 cx 属性的一部分。

标签: math svg geometry trigonometry


【解决方案1】:

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

但是对于一个旋转的椭圆,这是不正确的。除了大半径和小半径的缩放比例不同之外,旋转角度也可能不同。

所以数学上的问题是这样的:旋转椭圆的参数点是

θ 是旋转角度 r_1r_2 原始椭圆半径。 t 参数从0 变为

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

将以上两个组合成一个方程来求解 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] 中,然后再尝试将其作为算法实现。也许你会有更好的运气。

【讨论】:

    【解决方案2】:

    计算没那么容易。

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

    (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²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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-03
      • 2022-01-01
      相关资源
      最近更新 更多