求一个椭圆与另一个椭圆旋转时的交点
本文关键字:旋转 另一个 一个 | 更新日期: 2023-09-27 18:19:16
第一椭圆方程=>
(((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
我知道椭圆会相交于
- 一个点
- 两点
- 三点 <
- 4点/gh>
- 没有十字路口
是否存在一个通用的方程集来求解相同的
可以将这些方程转化为一般的二次曲线形式:
A*x^2+2*B*x*y+C*y^2+D*x+E*y+F=0
使用Matlab, Maple, Mathematica, Mathcad, free Maxima, derived, Octave等可用的数学包求解两个二次方程系统。解(点)是四阶方程的根(从0到4个实根)。
补充:Maple 6已经解决了这个系统,但解决方案文本非常非常长。看来你已经知道了半轴、旋转角和椭圆的圆心,所以有必要做一个仿射变换,把一个椭圆变换成另一个圆,把这个变换应用到两个椭圆上,解一个简单的方程组,然后再做回变换。
这种情况的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)}
这可以通过找到一个3x3对称矩阵的特征值来实现,而不需要(显式地)求解四分位数。
Kenneth J. Hill在Graphics Gems V上发表了一篇题为Matrix-based Ellipse Geometry的论文。这篇论文的大部分内容可以在谷歌图书上找到,但也有作者从sci新闻组中存档的摘要。1995年出版的《数学与计算机图形学算法》。你可以在这里找到它——在页面的2/3处。
关键的思想是,如果你把任何二维的圆锥曲线,不仅仅是椭圆,写成这样的矩阵形式
[ 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
是简并的,可以解释为一组行。剩下的就是将从退化特征矩阵中提取的直线与原始椭圆相交,并抛出多余的解。