Graph 用给定的点集识别图的类型

Graph 用给定的点集识别图的类型,graph,line,image-recognition,curve,Graph,Line,Image Recognition,Curve,我正试图设计一个程序,在给定一组点(x,y)的情况下绘制图形,并且它还应该识别曲线(直线、双曲线、抛物线),只需要这些点的帮助。 有算法可以做到这一点吗?你可以通过观察函数的极值来做到这一点,但这可能不是这个问题的最佳解决方案(我指的是抛物线函数中的问题,如y=sqrt(x*x-1))。 对于直线,您可以通过2个随机点计算y=ax+b,并检查其他哪些点等于此条件(如果是)。这是一条直线,如果没有,您可以检查2个其他异常或不检查。如果曲线可以是直线或二次曲线(双曲线、抛物线、椭圆、圆),那么接下来

我正试图设计一个程序,在给定一组点(x,y)的情况下绘制图形,并且它还应该识别曲线(直线、双曲线、抛物线),只需要这些点的帮助。
有算法可以做到这一点吗?

你可以通过观察函数的极值来做到这一点,但这可能不是这个问题的最佳解决方案(我指的是抛物线函数中的问题,如y=sqrt(x*x-1))。
对于直线,您可以通过2个随机点计算y=ax+b,并检查其他哪些点等于此条件(如果是)。这是一条直线,如果没有,您可以检查2个其他异常或不检查。如果曲线可以是直线或二次曲线(双曲线、抛物线、椭圆、圆),那么接下来的两种情况下可能会有其他人得到解决方案?

您需要五个点

如果这五个点是共线的,就有一条直线。(或者退化二次曲线?但如果你期望的是直线,这应该表示一条直线。)

如果四条线是共线的,则有一条退化圆锥曲线,由通过四个共线点的直线和通过第五个点的与第一条线不平行的任何直线给出

如果三条曲线是共线的,则有一条退化圆锥曲线,由通过三个共线点的直线和通过另外两个点的直线给出。(除非这两条线平行,否则这不是一条二次曲线。)

如果没有三个点共线,则有唯一的非退化二次曲线

要找到此二次曲线的方程式(Ax^2+Bxy+Cy^2+Dx+Ey+F=0),请查看,特别是
详细信息部分中的公式。输入你的五个x和y值,用x和y计算矩阵的行列式,这将给出你的二次曲线的公式。然后看看根据A,B和C的值得出什么样的二次曲线

如果有5个以上的点,选择5个点(最好不要三个点共线),找到圆锥曲线,然后检查剩余的点是否位于圆锥曲线上