我正在编写的程序需要找到两个椭圆的交点,两个椭圆都是垂直的并且共享同一个中心。我只需要四个中的第一个解决方案。
我可以用来解决这个问题的值是每个椭圆的垂直和水平分量的半径,或者如果您使用椭圆的标准方程,则为“a”和“b”值。我以前解决过圆锥非线性系统,但我不知道如何将代数思想转化为算法。
这似乎相对简单,但我完全被卡住了。抱歉,如果这是一个愚蠢的问题,但我仍然希望得到答案。
我正在编写的程序需要找到两个椭圆的交点,两个椭圆都是垂直的并且共享同一个中心。我只需要四个中的第一个解决方案。
我可以用来解决这个问题的值是每个椭圆的垂直和水平分量的半径,或者如果您使用椭圆的标准方程,则为“a”和“b”值。我以前解决过圆锥非线性系统,但我不知道如何将代数思想转化为算法。
这似乎相对简单,但我完全被卡住了。抱歉,如果这是一个愚蠢的问题,但我仍然希望得到答案。
假设您以椭圆中心位于原点的方式移动坐标系。然后你的两个椭圆都可以用一个规范方程来描述:
其中a 1 , b 1 , a 2 , b 2是椭圆的各自参数。
剩下的唯一一件事就是求解这个方程组。例如,Wolfram|Alpha可以为您完成(这里我用c代替a 2和d代替b 2)。
假设您的椭圆很重要,一对可能的解决方案是:
还有其他对,它们在根之前有不同的 +/- 符号。
为你的两对 (a,b)取椭圆方程,(x/a)^2 + (y/b)^2 = 1
将 y^2 向右分解,并使左侧相等:
(x*b1/a1)^2 - b1^2 = y^2 (1)
(x*b2/a2)^2 - b2^2 = y^2
这简化为:
(x*b1/a1)^2 - b1^2 = (x*b2/a2)^2 - b2^2
x 的二次方程,最多可以给出两个实数解 (x1,x2)。插入 x1 的椭圆方程 (1) 将为您提供两个 y 值(我们将它们命名为 y1、y2)。您的解决方案是:
(x1, y1)
(x1, y2)
(x2, y1)
(x2, y2)
当然,交点可以少一些,但是很容易确定,因为有些二次方程会有复杂的解。