在两个旋转时查找椭圆与另一个椭圆的交点

时间:2013-06-20 12:42:18

标签: c# geometry algebra

第一个椭圆的公式=>

(((x*cos(A)+y*sin(A)-H1)^2)/(a1^2))+(((x*sin(A)-y*cos(A)-K1)^2)/(b1^2))=1

第二个椭圆的公式=>

(((x*cos(B)+y*sin(B)-H2)^2)/(a2^2))+(((x*sin(B)-y*cos(B)-K2)^2)/(b2^2))=1

我知道椭圆会在

处相交
  1. One Point
  2. 两点
  3. 三点
  4. 四点
  5. 根本没有交叉点
  6. 是否有一套通用方程式来解决这个问题。

2 个答案:

答案 0 :(得分:1)

您可以将这些方程式转换为圆锥曲线的一般形式:

A*x^2+2*B*x*y+C*y^2+D*x+E*y+F=0

使用任何可用的数学包解决两个二次方程的系统:Matlab,Maple,Mathematica,Mathcad,free Maxima,Derive,Octave等。 解(点)是四阶方程的根(从0到4个实根)。

另外:Maple 6已经解决了这个系统,但解决方案文本非常长。 看起来你知道半轴,旋转角度和wllipse的中心,因此有必要进行将一个椭圆变换为圆形的仿射变换,将这个变换应用于两个椭圆,解决简单系统,并进行反变换。

针对此案例的Maple解决方案:

solve({A*x^2+2*B*x*y+C*y^2+D*x+E*y+F=0,x^2+y^2=1},{x,y});

    {y = RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2), 
x = -(-RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)^2*A+
RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)^2*C+
RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)*E+A+F)/
(2*RootOf((4*B^2+C^2+A^2-2*A*C)*_Z^4+(2*E*C+4*D*B-2*E*A)*_Z^3+(D^2-4*B^2+E^2+2*F*C-2*A*F+2*A*C-2*A^2)*_Z^2+(2*E*A-4*D*B+2*F*E)*_Z-D^2+2*A*F+F^2+A^2)*B+D)}

答案 1 :(得分:1)

可以通过找到3x3对称矩阵的特征值来完成,而无需(明确地)求解四次。

Kenneth J. Hill在Graphics Gems V中有一篇题为 Matrix-based Ellipse Geometry 的论文。大部分论文都可以在Google书籍上找到,但是作者总结了1995年的新闻组sci.math和comp.graphics.algorithms。你可以找到它here - 看看大约2/3在页面的下方。

关键的想法是,如果你把圆锥曲线,任何2d圆锥曲线不仅仅是椭圆形,就像这样的矩阵形式:

        [ A  B  D ] [ x ]
[x y 1] [ B  C  E ] [ y ] = [ 0 ]
        [ D  E  F ] [ 1 ]

transpose(X).C.X = 0,那么你可以玩一些游戏。 C被称为圆锥曲线的特征矩阵。

因此,如果C1C2是省略号的特征矩阵,而xi是交点,则xi是任何具有特征的圆锥曲线的交点矩阵C1 + lambda C2。如果选择lambda作为特征值,则C1 + lambda C2是简并的,可以解释为一组行。剩下的就是将从简并特征矩阵中提取的线与原始椭圆相交,并抛出无关的解。