如何在给定边界矩形的情况下找到椭圆长轴的旋转角度?

时间:2008-09-25 07:11:12

标签: rotation ellipse bounding

我有一个以(0,0)为中心的椭圆,边界矩形是x = [-5,5],y = [ - 6,6]。椭圆与(-5,3),( - 2.5,6),(2.5,-6)和(5,-3)

的矩形相交

我对椭圆一无所知,但我唯一需要知道的是主轴旋转的角度。

似乎答案必须非常简单,但我只是没有看到它......感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

椭圆的渐变与沿椭圆一侧的边界矩形的交点的渐变相同。在你的情况下,这是从(-2.5,6)到(5,-3)的线,椭圆的顶边。该线的垂直下降为9,水平线为7.5。

所以我们最终会得到以下直角三角形。

(-2.5,6)
  *-----
  |\x
  | \
  |  \
9 |   \
  |    \
  |    x\
  +------* (5,-3)
    7.5

我们正在寻找的角度是x,这两个位置都是相同的。

我们可以将其计算为:

   -1
tan   (9/7.5)

给我们一个-50.19度的角度

答案 1 :(得分:2)

如果(0,0)是中心,则椭圆的方程式为:

F(x,y)= Ax ^ 2 + By ^ 2 + Cxy + D = 0

对于任何给定的椭圆,并非所有系数A,B,C和D都是唯一确定的。可以将方程乘以任何非零常数,并获得相同椭圆的新方程。

4分你有4个方程,但由于这些点是两对对称点,这些方程式不是独立的。您将获得2个独立的方程式。你可以通过使用椭圆与软管点中的矩形相切的事实得到另外两个方程式(这就是我理解它的方式)。

所以如果F(x,y)= Ax ^ 2 + By ^ 2 + Cxy + D你的条件是:
dF / dx = 0点(-2.5,6)和(2.5,-6)
点(-5,3)和(5,-3)中的dF / dy = 0

以下是四个线性方程式

F(5, -3) = 5^2 * A + (-3)^2 * B + (-15) * C + D = 0  
F(2.5, -6) = (2.5)^2 * A + (-6)^2 * B + (-15) * C + D = 0  
dF(2.5, -6)/dx = 2*(2.5) * A + (-6) * C = 0  
dF(5, -3)/dy = 2*(-3) * B + 5 * C = 0  

经过一些清洁后:

   25A +  9B - 15C + D = 0 //1
6.25A + 36B - 15C + D = 0 //2
   5A       -  6C     = 0 //3
      -  6B +  5C     = 0 //4

仍然不是所有4个方程都是独立的,这是一件好事。该集合是同质的,如果它们是独立的,您将得到唯一但无用的解A = 0,B = 0,C = 0,D = 0。

正如我之前所说,系数不是唯一确定的,所以你可以设置你想要的系数之一并去掉一个方程。例如

   25A + 9B - 15C = 1 //1
   5A      -  6C = 0 //3
      - 6B +  5C = 0 //4

从中得到:A = 4/75,B = 1/27,C = 2/45(D当然是-1)

现在,要获得角度,请应用坐标转换:

x = ξcos(φ) - ηsin(φ)
y = ξsin(φ) + ηcos(φ)

(我无法抗拒使用那些字母:))
等式F(x,y)= 0

F(x(ξ, η), y(ξ, η)) = G(ξ, η) =
  A (ξ^2cos^2(φ) + η^2sin^2(φ) - 2ξηcos(φ)sin(φ))
+ B (ξ^2sin^2(φ) + η^2cos^2(φ) + 2ξηcos(φ)sin(φ))
+ C (ξ^2cos(φ)sin(φ) - η^2cos(φ)sin(φ) + ξη(cos^2(φ) - sin^2(φ))) + D

使用这两个身份:

2cos(φ)sin(φ) = sin(2φ)
cos^2(φ) - sin^2(φ) = cos(2φ)

你得到的系数C'代表G(ξ,η)中的乘积ξη为:

C'=(B-A)sin(2φ)+ Ccos(2φ)

现在你的问题是:φ系数C'消失的角度(等于零)
由于存在多个轴,因此存在多个角度φ。在主轴B'>的情况下; A'

答案 2 :(得分:0)

  1. 设置ellipse的角度= 0
  2. 计算4个交点
  3. 计算出计算出的交点与所需交点之间的误差(即总和4个距离)。
  4. 如果误差太大,请使用割线方法或Newton-Rhapson计算椭圆的新角度,然后转到2.
  5. 我使用了类似的方法来解决另一个椭圆问题:

    http://successfulsoftware.net/2008/07/18/a-mathematical-digression/

    http://successfulsoftware.net/2008/08/25/a-mathematical-digression-revisited/

    另见:

    http://en.wikipedia.org/wiki/Secant_method

    http://en.wikipedia.org/wiki/Newton_Rhapson

相关问题