我正在开展一个小项目,我希望通过一个粘性效果连接两个圆圈。我在网上安静地搜索了很多内容,并以标签栏或侧边栏菜单的形式发现了一些例子,但这些都是固定的,而不是我正在寻找的内容。
我基本上想要的是following。所以有一个圆圈,如果我将它紧紧地拖到另一个圆圈上,它会合在一起,也称为粘性效应。
代码示例是最好的,但是如何做到这一点的方向/方法也会帮助我。
答案 0 :(得分:3)
有趣的问题。
脱离我的脑海,这就是我如何处理它:
计算2个圆圈的交点(我找到了这个链接:Circle-circle intersection points)
计算每个圆的交叉部分的弧度范围。
将这些弧度范围扩大几度。为每个圆的剩余部分定义弧(将绘制的部分"非粘性")
使用trig和Catmull-Rom splines,为外部" non-gooey"创建一个封闭的路径。每个圆圈的部分。
Catmull-Rom算法应使用平滑曲线填充2个圆形圆之间的间隙,这些曲线看起来很像" Gooey"你展示的圈子。
我在github上有一个项目,其中包含用于从一系列点创建Catmull-Rom样条线的Swift代码:Trochoid demo
该项目创建开放曲线,而不是封闭路径。使用Catmull-Rom Splines创建平滑闭合路径的技术略有不同。我有另一个名为RandomBlobs的Github项目(用Objective-C编写),它创建了平滑的闭合路径。您应该能够找出如何更改Swift代码以从Objective-C代码创建封闭路径。自从我编写了RandomBlobs代码以来,它已经足够长了,我不记得我做了什么。
我不确定我上面描述的方法是否足够快以实时绘制,但我打赌它会。那个TrochoidDemo项目正在为每个动画帧做一个很多的触发,它的动画非常流畅。如果您的项目不够顺畅,您可能需要进行一些优化。