第一个椭圆的方程=>
(((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
我知道椭圆相交于
- 一点
- 两点
- 三分
- 四点
- 完全没有路口
是否有一套通用的方程来解决相同的问题。
您可以将这些方程转换为圆锥曲线的一般形式:
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 解决了这个系统,但是解决方法的文字很长。似乎您知道椭圆的半轴、旋转角和中心,因此可能值得进行仿射变换,将一个椭圆变换为非圆,将此变换应用于两个椭圆,求解简单系统并进行反向变换。
这种情况下的枫木解决方案:
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)}
它可以通过查找 3x3 对称矩阵的特征值来完成,而无需(显式)求解四次方程。
Kenneth J. Hill 在 Graphics Gems V 中有一篇题为Matrix-based Ellipse Geometry的论文。该论文的大部分内容都可以在 Google 书籍中找到,但有作者在 1995 年从新闻组 sci.math 和 comp.graphics.algorithms 存档的摘要。你可以在这里找到它——看看下面的 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
称为二次曲线的特征矩阵。
因此,如果C1
和C2
是椭圆的特征矩阵,并且xi
是交点,则xi
是任何圆锥曲线与特征矩阵的交点C1 + lambda C2
。如果 lambda 被选为特征值,则C1 + lambda C2
它是退化的并且可以被解释为一组线。剩下的就是将从退化特征矩阵中提取的线与原始椭圆相交并抛出无关的解。