从点获取曲线细节

我有一个2D点的
List
。什么是迭代点的有效方式,以确定点列表是直线还是弯曲(以及到什么程度)。我想避免简单地在较小的子集之间获得斜率。我该怎么做呢? 谢谢你的帮助 编辑:感谢您的回复。为了澄清,我不需要它在数值上准确,但我想确定用户是否用他们的鼠标创建了一个弯曲的形状,如果是这样,曲线是多么尖锐。这些值并不太重要,只要可以确定尖锐曲线和稍微柔和曲线之间的差异即可。     
已邀请:
如果您只是想知道所有点是否适合度数为
d
的曲线,只需在端点上应用拉格朗日插值,并在阵列内部应用
d-2
等间距点。这将给出一个度数为
d
的多项式。 获得曲线后,只需遍历数组,看看每个点离曲线有多远。如果它们超过阈值,则您的数据不符合您的度数
d
多项式。 编辑:我应该提一下,迭代
d
的值是一个有限的过程。一旦
d
达到你拥有的点数,你就会得到一个完美的契合,因为拉格朗日插值是如何工作的。     
要测试它是否是直线,请计算相关系数。我确信维基百科上有这个内容。 测试它是否弯曲更为复杂。您需要知道您期望的曲线类型,并且与之相符。     
这是一种计算角度的方法:使用C#计算2点之间的角度 只需计算列表中每个点之间的角度并创建角度列表,然后比较角度列表值是否不同。如果它们没有不同则意味着它是直线,否则就是曲线...... 如果它是直线,则所有点之间的角度必须相同。     
这里的问题非常朦胧:“我想避免简单地在较小的子类之间获得斜坡” 您可能需要插值a-la B样条。如果记忆为我服务,他们会使用两个点和两个额外的控制点。从那时起(至少1980年代),实现无处不在。这应该让你进行中 请记住,您可能需要添加控制点以使曲线满足端点。确保达到这些目标的一个技巧是简单地将端点复制为额外的控制点。 干杯 更新已添加到codeproject的链接 看起来我在80年代记得的东西可能是Bezier曲线 - 各种各样的前身。     

要回复问题请先登录注册