我正在尝试设计一个程序,该程序可以在给定一组点(x,y)的情况下绘制图形,并且它还应该仅在点的帮助下识别曲线(直线、双曲线、抛物线)。有没有算法可以做到这一点?
2 回答
如果曲线可以是直线或圆锥曲线(双曲线、抛物线、椭圆、圆),则需要五个点。
如果这五个点共线,则您有一条直线。(或退化圆锥曲线?但如果你期待直线,这应该表示直线。)
如果四个共线,则您有一个退化的圆锥曲线,由通过四个共线点的线和通过第五个点的不平行于第一条线的任何线给出。
如果三个共线,则有一个退化的圆锥曲线,由通过三个共线点的线和通过其他两个点的线给出。(除非这两条线平行,在这种情况下这不是圆锥曲线。)
如果没有三点共线,则您有一个唯一的非退化圆锥曲线。
要找到此圆锥曲线的方程 (Ax^2 + Bxy + Cy^2 + Dx + Ey + F = 0),请查看此页面,特别是该部分中的公式DETAILS
。输入您的五个 x 和 y 值,根据 x 和 y 计算矩阵的行列式,这将为您提供圆锥曲线的公式。然后看这里,根据 A、B 和 C 的值找出你有什么样的圆锥曲线。
如果您有超过 5 个点,请选择 5 个点(最好不要三个点共线),找到圆锥曲线,然后检查其余点是否位于圆锥曲线上。
您可以通过观察极端函数来做到这一点,但可能不是该问题的最佳解决方案(我的意思是抛物线函数中的问题,例如y = sqrt(x*x-1))。对于直线,您可以通过 2 个随机点计算 y = ax + b 并检查其他点等于该条件(如果是)。如果没有,这是一条直线,您可以检查其他 2 个异常或任何异常。也许其他人会为接下来的 2 个案例获得解决方案?