Javascript 如何比较Bezier曲线的形状
我想比较两条贝塞尔曲线。我知道端点和控制点的坐标,但对于2条比较曲线,该坐标可能不相同。我需要比较一下这些曲线的形状。为了“真实”,形状必须大致相同 我使用javascript和paper.js 请看图片:Javascript 如何比较Bezier曲线的形状,javascript,algorithm,vector-graphics,image-recognition,paperjs,Javascript,Algorithm,Vector Graphics,Image Recognition,Paperjs,我想比较两条贝塞尔曲线。我知道端点和控制点的坐标,但对于2条比较曲线,该坐标可能不相同。我需要比较一下这些曲线的形状。为了“真实”,形状必须大致相同 我使用javascript和paper.js 请看图片: 出路在哪里?Thanx.根据您提供的示例,我假设 大小无关 形状可以扭曲到某一点 如果旋转曲线不相同 N点采样曲线 只是一步一步地通过参数 对于三次曲线,我将使用16到32个采样点 点数越多,比较就越精确 但是更大的运行时间 计算每段的角度 使用atan2或 将这些角度存储在阵
出路在哪里?Thanx.根据您提供的示例,我假设
- 大小无关
- 形状可以扭曲到某一点
- 只是一步一步地通过参数
- 对于三次曲线,我将使用16到32个采样点
- 点数越多,比较就越精确
- 但是更大的运行时间
- 使用atan2或
- 将这些角度存储在阵列中
- 恰当地做到这一点的最好和最简单的方法是
- 如果相关系数接近
,则形状相似或相同+1
- 然后进行上述几次旋转(例如0,10,20,…,350度)
- 如果有,如果这些相同,则停止并返回true
- 如果没有,则返回false
- 曲线的旋转只是给它的所有角度加上一个常数
- 如果将两个比较的曲线角度偏移为从角度0开始
- 所以只要从曲线的所有角度减去第一个角度
- 然后将两条曲线彼此对齐,这样只需要比较两个位置
- 所以你比较一下这个
- 如果不相同,则在一条曲线上添加180度,然后再次比较
- 这就足够了
- 在关联之前,您应该对所有角度进行规格化(将其设置为间隔
) - 更多的想法请看这里