我在谷歌上搜索了很多,但我找到的所有算法都使用方程来寻找控制点。我认为有更简单的解决方案来实现它,并在ExtJS源代码中找到了一些实现:http://docs-devel.sencha.com/extjs/4.1.2/source/Draw.html#Ext-draw-Draw-method-getAnchors它利用直线最近点之间的夹角来检测控制点和一些黑客。
有人能定义一下这是什么样的控制点搜索算法吗?我被困在用圆周率和角度进行美甲可能会有更详细和更清晰的解释,或是共同的想法来解决这个问题?

最佳答案

这是Catmull-Rom拟合:代码试图根据点X-1和X+1的位置,通过点X找到合适的切线,使切线平行于线(X-1)--(X+1),然后摆弄产生的控制点,以确保“传入”和“传出”切线产生美观的曲线。
有点
假设切线等于(P-1)--(P+1)
看起来很可怕
稍微缩放控制点以获得更好的拟合
从技术上讲,步骤4不再是Catmull Rom,因为一旦设置了切线,真正的Catmull Rom样条线就会停止如果您确实需要步骤4,通常的方法是根据投影距离缩放点:如果您将点X投影到直线(X-1)--(X+1)上,它很少精确地位于直线的中间,但在距离点X-1的某个距离v%和距离点X+1的某个距离(100-v)%处,因此您会相应地缩放找到的切线。

07-24 18:36