首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >可可:两点之间的“随机”线?

可可:两点之间的“随机”线?
EN

Stack Overflow用户
提问于 2012-03-09 13:21:06
回答 1查看 1.1K关注 0票数 3

在我的可可爱好项目(在OSX上),我有一个观点与一些观点。就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NSPoint pt1 = NSMakePoint(20,100);
NSPoint pt2 = NSMakePoint(100,30);

我想在这两点之间创造一条蜿蜒的线(这条线永远不会穿过去)。当然,要点可能会有所不同。我对NSBezierPath很熟悉,但我不是图形高手。

在这方面有两个变体。给定NSBezierPath *p ...[p moveToPoint:pt1]的设置

  1. 使用[p lineToPoint:ptx],在这里我创建了一条锯齿状的弯曲线,
  2. 使用[p curveToPoint:ptx controlPoint1:cpt1 controlPoint2:cpt2]与弯曲线是平滑的。

第二种情况似乎更困难,因为合理的控制点也必须计算出来。

最后,我希望能够调整这条线的折线量。如果我将像int numOfIntermediatePoints这样的变量设置为1,那么pt1pt2之间就会有一条平滑的曲线。如果我将numberOfIntermediatePoints设置为10,则会有更多的移动。我不希望最后的中间点离最后一点很远(在行的末尾留下很大的变化)。

我已经研究过使用Perlin噪音,但似乎很难将这条线引导到它的终点。似乎计算一个NSPoint项数组(可能还有一个控制点数组,对于第二个例子),然后循环它们来创建这条线是有意义的。

最好的办法是什么?

更新

按照汤米的建议,我把雷蒙德·希尔的Javascript-Voronoi库移植到了Obj。你可以在这里找到它:https://github.com/ccheaton/objcvoronoi

另一次更新

再来一次更新--我使用了Dijkstra的算法,发现它对我试图实现的目标来说太过分了。最后,我实现了一个简化的变体,允许我为随机行指定指导节点。在这个图像中,行开始在左中,线末端在右中,在(xMax * 0.33,0)和(xMax * 0.66,yMax)有指导点。

最后更新

为了使它少一些锯齿状,我添加了一个可选的松弛算法。现在的性能不是很好,但这对我想要的使用来说并不重要。

EN

回答 1

Stack Overflow用户

发布于 2012-03-09 13:43:24

有许多方法在脑海中浮现。

在代码方面,你可以直接从互联网上拔出,你可以拉下一个随机的迷宫发生器和一个迷宫解决器,然后根据你的需要生成一个迷宫和入口点,然后拿出解决方案。

在我介绍的过程中,您可以尝试一种递归方法--从开始到结束以直线开始,然后对每条直线进行如下操作:

  • 想象一下,你要把这条线分成两半,在中心点把它分开,然后把它移到某处,所以.
    • 算出正常的线
    • 找出在你的直线重叠之前,你可以移动想象的中心切点的距离(我认为,最简单的方法是二进制搜索,而不是任何分析)。
    • 如果两个极端太接近,那就返回。
    • 否则,选择两个极端之间的随机位置,打破线和递归

对于其他有趣的想法,在起始点和终点之间抛出大量随机点,计算Voronoi图,然后(i)从起始点走到边界上的任何地方;(ii)按照到达端点边界的最短路径沿着单元边界走(例如,使用Dijkstra算法);然后(iii)走到终点。然后,您可以遍历(ii)中添加的每个顶点到顶点链接,找出最短的路径,所有当前选定的链接都从潜在的集合中删除,并重复几次,以使路径更有趣。

从大致相同的观点来看,在点与点之间抛出一堆随机的障碍物,并运行一个A*式的探路者,可能会产生一些有趣的东西。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9641173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文