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

可可:两点之间的“随机”线?
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

复制
相关文章
flutter的列表下拉刷新
flutter的列表下拉刷新需要借助一个组件来实现,这个组件的名字是RefreshIndicator,直译过来就是刷新指示灯。
挥刀北上
2021/01/07
4.8K0
flutter的列表下拉刷新
模板代码 - 列表和下拉刷新
摘要总结:本篇文章主要介绍了如何使用ViewStub和ViewStubCompat实现多布局,以便在不同的屏幕尺寸和分辨率下达到较好的展示效果。同时,还介绍了如何使用ViewStub和ViewStubCompat实现内边距和圆角,以及自定义属性在布局中的使用。
用户1172465
2018/01/05
2.9K0
【Flutter】ListView 列表高级功能 ( RefreshIndicator 下拉刷新组件 )
使用 Flutter 提供的 RefreshIndicator 组件 , 可以实现下拉刷新的功能 ;
韩曙亮
2023/03/29
2K0
【Flutter】ListView 列表高级功能 ( RefreshIndicator 下拉刷新组件 )
微信小程序列表数据的局部刷新
本文由来源 17,由 system_mush 整理编辑,其版权均为 17 所有,文章内容系作者个人观点,不代表 Java架构师必看 对观点赞同或支持。如需转载,请注明文章来源。
Java架构师必看
2020/04/10
2.6K0
RecyclerView 刷新列表数据的 notifyDataSetChanged() 为什么是昂贵的?
当列表数据变更时,调用 notifyDataSetChanged() 是最省事的。无需关心变更的细节,一股脑统统刷一遍就完事了。但这样做也是最昂贵的。读完这一篇源码走查就知道为啥它这么昂贵了。
Rouse
2021/05/28
3.4K0
RecyclerView 刷新列表数据的 notifyDataSetChanged() 为什么是昂贵的?
​借助云开发数据库实现小程序列表上拉刷新功能丨云开发101
上一期101专栏中,我们介绍了如何借助云开发数据库实现小程序的列表触底自动加载功能,相对应的,小程序列表上拉刷新又该如何实现呢?本期专栏就来为大家解答。
腾讯云开发TCB
2019/10/08
6040
微信小程序----列表下拉刷新上拉加载(MUI下拉刷新和上拉加载更多)
效果图 原理 利用微信小程序的onPullDownRefresh函数(下拉刷新监听函数)和onReachBottom函数(上拉加载监听函数)监听页面的下拉和上拉动态,从而对页面数据进行修改! 页
Rattenking
2021/02/01
1.9K0
微信小程序----列表下拉刷新上拉加载(MUI下拉刷新和上拉加载更多)
MariaDB数据库刷新权限表命令
当授权或者修改用户权限时,往往不会马上生效的这是因为数据库没有马上去更新权限相关的表,而是在内存中所以一般都会使用更新权限表,来实现马上更新
用户9006224
2022/12/21
1K0
Java常用数据库列表
MySQL是一种开源的关系型数据库管理系统(RDBMS),由瑞典MySQL AB公司开发,现在由Oracle公司负责维护和支持。MySQL是最流行的数据库之一,被广泛用于各种应用程序和网站开发。 MySQL具有以下特点:
ha_lydms
2023/08/10
5520
Java常用数据库列表
JS/JQuery页面刷新、局部刷新
//div的局部刷新 $(".dl").load(location.href+" .dl"); //全页面的刷新方法 window.location.reload()刷新当前页面. parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷新父窗口对象(用于单开窗口) top.location.reload()刷新最顶端对象(用于多开窗口)
小语雀网
2022/05/06
5.8K0
php案例之数据库选择列表
作者:陈业贵 华为云享专家 51cto(专家博主 明日之星 TOP红人) 阿里云专家博主 文章目录 cyg.php check.php 效果: ---- cyg.php <style> body{ background:#ccc; }</style> <b>数据库选择列表<b><br> <form action="check.php" method="POST">//提交到check.php <select name="database" size="10"> <option value="0"
贵哥的编程之路
2022/09/23
6260
php案例之数据库选择列表
数据库Mongodb-用户权限列表
Mongodb用户权限列表 read 允许用户读取指定数据库 readWrite 允许用户读写指定数据库 dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限 readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限 r
cwl_java
2021/08/30
7520
EasyDSS前端界面在页面缩小时内置列表仍需手动刷新的优化
RTMP协议的视频平台EasyDSS除了直播外,还支持点播,转码、上传一体化设计,使音视频资源转码后可立即面向互联网进行发布,在线上教育领域已经能够成熟落地。在开发以及功能的更新过程中,EasyDSS内还运用了很多其他层面的开发技巧,我们也会不定期在博客更新,欢迎大家了解测试。
TSINGSEE青犀视频
2021/09/07
4090
Power BI 异步刷新-查询刷新历史与手动停止刷新
有朋友在评论区提出,如果是手动刷新或者计划刷新,是否知道了requestid就同样可以手动停止呢?
陈学谦
2022/04/08
4.6K0
Power BI 异步刷新-查询刷新历史与手动停止刷新
刷新.NET
.NET Core 发布的那一天起,它在完成自我刷新的过程,一切为了适应未来,云原生。不仅仅跨平台那么简单。
李明成
2020/02/12
6210
UI 刷新
与屏幕刷新相关的有很多,比如刷新流程,屏幕缓存,周期刷新,vsync信号,SurfaceFlinger。
Yif
2020/04/25
2.1K0
5.5 PowerBI技巧-定时刷新与增量刷新
加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
PowerBI自己学_轻松
2025/02/26
1690
5.5 PowerBI技巧-定时刷新与增量刷新
下拉刷新
getMeasuredHeight():获取测量完的高度,只要在onMeasure方法执行完,就可以用
六月的雨
2022/01/17
2.2K0
金蝶KIS&K3助记码SQL数据库批量刷新
金蝶KIS&K3助记码SQL数据库批量刷新 用的次数不多,就没有写入存储过程或者触发里面了,可以自行实现。 第一步选择对应账套的数据库,执行下面的命令,这个是一个函数。 go if exists (select * from sysobjects where name='fun_getPY' and xtype='Fn') begin drop function fun_getPY end go create function fun_getPY(@str nvarchar(4000)) re
landv
2018/06/26
7660
uni-app下拉刷新加载刷新数据
onPullDownRefresh 监听该页面用户下拉刷新事件 需要在 pages.json 里 开启 enablePullDownRefresh
达达前端
2019/10/14
7.4K0

相似问题

每晚刷新postgres数据库

20

在数据库刷新期间保留现有登录

10

SSMS数据库节点刷新导致恢复失败

10

如何在刷新数据库后保存并还原权限

10

通过每日数据库刷新撤销Server登录访问

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

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