求一判断抖动程度的算法 最近公司给了个题目,要求判断一个曲线的抖动程度,然后根据判断结果决定是否对此曲线进行平滑!请问,如何获得一条曲线的抖动程度,或者说是光滑程度阿!各位大侠帮帮偶吧,给点相关思路或者资料来源也行啊!先谢过啦! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以试试在画的过程中判断:随时记录当前点坐标与前面若干点的坐标值(例如记录当前点x0与前面的20个点x1……x20)然后计算x0点与x1点间的斜率值,并计算x1与x2间,x2与x3间……x19与x20间的斜率。根据已有的前面的范围计算出一个斜率变化的阈值范围,看x0与x1间的斜率是否在你计算出的合理阈值变化范围之内,如果在,ok;否则,则x0点坐标需要平滑处理。K1=K(x1,x2), K2=K(x2,x3)…… K19= K(x19, x20)使用K1等形成一个判断阈值Ak_unknow = K(x0, x1)if(k_unknow < A){ pass//合理值}else{ 平滑处理} 谢谢 drowdrow 阀值的选取可能有点难度,倘若我是用鼠标画一个圆,那么阀值要怎么选,这个阀值可能要动态选取吧,这个是不是传说中的自适应? 而且x1、x2……x20点之间的距离的选取也应该很重要。若x1、x2点间的距离太小了,例如为1,则可能计算出的K值之间会变化很大距离太大了,不能对快速变化做出反映。因此每隔鼠标移动3~5个点记录一次参考点比较合适 drowdrow ,我是用这种方法实现的!把每个点到 它两边的点所连直线 的距离相加,然后除以曲线的总长度,作为门限值!比如:A B C D ······四个点,计算点B 到 线AC的距离+点C 到线BD的距离+······ 然后用总和除以线的长度,计算出的值跟一个门限值比较!可是,有点小问题!倘若画一条垂直的线(比较长的),线中间有一点发生抖动(就一点,还比较严重),这种情况下算出来的值虽然很小,但是抖动的效果却非常明显,请问,能否通过别的办法,把线段的长度作为权重加到门限的计算中? drowdrow谢谢你帮忙,等过几天能给帖子加分了,我再结帖! CComboBox下拉框只能显示一点点? SQL插入语句的问题,急! 将控件灰掉之后如何还能响应双击消息? hook无故进入死循环? 为什么程序总是在运行时出错 有没有关于正则表达式的c++类,急! MFC程序的About对话框内容在哪改? 如何以异或的方式写出字来? 急需winzip注册吗! 我怎样把加工具条的区域拉大,怎么弄,然后怎么随意放进随意大小的IE样式TOOLBAR 关于asp.net的问题 可以随意拖动的Edit控件, 如何通过鼠标消息实现?
随时记录当前点坐标与前面若干点的坐标值(例如记录当前点x0与前面的20个点x1……x20)
然后计算x0点与x1点间的斜率值,并计算x1与x2间,x2与x3间……x19与x20间的斜率。
根据已有的前面的范围计算出一个斜率变化的阈值范围,看x0与x1间的斜率是否在你计算出的
合理阈值变化范围之内,如果在,ok;否则,则x0点坐标需要平滑处理。K1=K(x1,x2), K2=K(x2,x3)…… K19= K(x19, x20)
使用K1等形成一个判断阈值Ak_unknow = K(x0, x1)
if(k_unknow < A)
{
pass//合理值
}
else
{
平滑处理
}
阀值的选取可能有点难度,倘若我是用鼠标画一个圆,那么阀值要怎么选,这个阀值可能要动态选取吧,这个是不是传说中的自适应?
若x1、x2点间的距离太小了,例如为1,则可能计算出的K值之间会变化很大
距离太大了,不能对快速变化做出反映。
因此每隔鼠标移动3~5个点记录一次参考点比较合适
比如:A B C D ······四个点,计算点B 到 线AC的距离+点C 到线BD的距离+······ 然后用总和除以线的长度,计算出的值跟一个门限值比较!
可是,有点小问题!倘若画一条垂直的线(比较长的),线中间有一点发生抖动(就一点,还比较严重),这种情况下算出来的值虽然很小,但是抖动的效果却非常明显,请问,能否通过别的办法,把线段的长度作为权重加到门限的计算中?