我正在用 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)可能有一个很好的算法,但我什至不知道它是否是开源的。
- Wikipedia: Intersecting Two Conics - 我没有足够的线性代数来理解这个解决方案。
关于我应该如何计算交叉点的任何建议?速度(可能需要计算很多交叉点)和优雅是主要标准。代码会很棒,但即使是一个好的方向也会有所帮助。