我正在使用Python编写一个基本的2D形状库(主要用于操作SVG图形),但我不知道如何高效地计算两个椭圆的交点。
每个椭圆由以下变量定义(所有变量均为浮点数):
c: center point (x, y)
hradius: "horizontal" radius
vradius: "vertical" radius
phi: rotation from coordinate system's x-axis to ellipse's horizontal axis
忽略省略号相同的情况,可能存在0到4个交点(无交点、切点、部分重叠、内部切点和完全重叠)。
我找到了一些潜在的解决方案:
- SymPy几何模块 - 基本上只是将椭圆方程插入到 SymPy 的求解器中。如果没有已有的求解器,我不确定这是否有意义。(顺便说一下,我本来会用 SymPy 而不是自己写,但它在处理疯狂的浮点数时表现非常糟糕)
- 如何检测椭圆是否与圆相交? - 这可能可以改为适用于两个椭圆,但我对如何将其转化为合理的代码有些模糊。
- 如何计算椭圆和椭圆的交点? - 回答中提到的库(CADEMIA)可能有一个很好的算法,但我甚至无法确定它是否开源。
- 维基百科:两个圆锥曲线的交点 - 我对线性代数的掌握还不够,无法理解这个解决方案。