我需要找到一条线(其原点是椭圆的中心)与2D椭圆相交的点...我可以轻松地在圆上找到一个点,因为我知道角度F和圆的半径(R):
x = x0 + R * cosF
y = y0 + R * sinF
但是我只是想不出如何处理一个椭圆...我知道它的尺寸(A和B),但是寻找参数T的方法是什么呢?
x = x0 + A * cosT
y = y0 + B * sinT
据我了解,参数T(T角)与F角相距不远(在某些情况下约为+ -15度),但我只是不知道如何计算!
如果有善良的灵魂,请帮助我解决这个问题...
最佳答案
位于0,0处的椭圆的标准方程为:
1 = (x)^2 / (a) + (y)^2 / (b)
其中a是水平轴直径的1/2,b是垂直轴直径的1/2。
你有一条线,假设一个方程:
y = (m)(x - x0) + y0
因此,让我们即插即用!
1 = (x)^2 / (a) + (m(x - x0) + y0)^2 / (b)
1 = x^2 / a + (mx + (y0 - mx0))^2 / b
1 = x^2 / a + (m^2 * x^2 + 2mx*(y0 - mx0) + (y0 - mx0)^2) / b
1 = x^2 / a + (m^2 x^2) / b + (2mx*(y0 - mx0) + (y0^2 - 2y0mx0 + m^2*x0^2)) / b
1 = ((x^2 * b) / (a * b)) + ((m^2 * x^2 * a) / (a * b)) + (2mxy0 - 2m^2xx0)/b + (y0^2 - 2y0mx0 + m^2*x0^2)/b
1 = ((bx^2 + am^2x^2)/(ab)) + (x*(2my0 - 2m^2x0))/b + (y0^2 - 2y0mx0 + m^2*x0^2)/b
0 = x^2*((b + a*m^2)/(ab)) + x*((2my0 - 2m^2x0)/b) + (((y0^2 - 2y0mx0 + m^2*x0^2)/b) - 1)
最后一个方程遵循标准二次方程的形式。
因此,只需使用二次方程式即可:
((b + a*m^2)/(ab))
((2my0 - 2m^2x0)/b)
and
(((y0^2 - 2y0mx0 + m^2*x0^2)/b) - 1)
得到交点处的X值;然后,将这些值插入原始线方程中以获取Y值。
祝好运!
关于c# - 如何在2D(C#)中找到直线与椭圆相交的点,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10692541/