我正在尝试设计一个程序,它可以在给定一组点(x,y)的情况下绘制图形,并且它还应该识别曲线(直线,夸张,抛物线),只需要这些点的帮助。有没有一个算法可以做到这一点?
发布于 2012-04-04 10:36:52
如果曲线可以是直线或二次曲线(双曲线、抛物线、椭圆、圆),则需要五个点。
如果这五个点是共线的,你就有一条直线。(或者退化的二次曲线?但如果您期望的是直线,这应该表示直线。)
如果四个共线,你有一个退化的二次曲线,由通过四个共线点的直线和通过第五个点的任何与第一条直线不平行的直线给出。
如果三个共线,你有一个退化的二次曲线,由通过三个共线点的直线和通过另外两个点的直线给出。(除非这两条线是平行的,在这种情况下,这不是二次曲线。)
如果没有三个点是共线的,你有一个唯一的,非退化的二次曲线。
要找到此二次曲线(Ax^2 + Bxy + Cy^2 + Dx + Ey +F= 0)的方程,请查看this page,特别是DETAILS
部分中的公式。输入五个x和y值,计算x和y矩阵的行列式,这将得到圆锥曲线的公式。然后查看here,根据A、B和C的值计算出哪种类型的圆锥曲线。
如果有5个以上的点,请选取5个点(最好没有3个点是共线的),找到圆锥曲线,然后检查剩余的点是否位于圆锥曲线上。
发布于 2010-04-20 22:02:59
你可以通过观察函数的极值来做到这一点,但它可能不是这个问题的最优解(我是指抛物线函数中的问题,比如y = sqrt(x*x-1))。对于直线,你可以用2个随机点计算y= ax +b,如果是,检查其他点是否等于这个条件。这是一条直线,如果没有,你可以勾选2个其他的异常,或者什么都没有。也许其他人能在接下来的两个案例中找到解决方案?
https://stackoverflow.com/questions/2678993
复制